/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.hadoop.yarn.security;

import org.apache.hadoop.security.authorize.AccessControlList;

import java.util.Map;

/**
 * This class contains permissions info for the target object.
 */
public class Permission {

  private PrivilegedEntity target;
  private Map<AccessType, AccessControlList> acls;

  public Permission(PrivilegedEntity target,
      Map<AccessType, AccessControlList> acls) {
    this.target = target;
    this.acls = acls;
  }

  public Map<AccessType, AccessControlList> getAcls() {
    return acls;
  }

  public PrivilegedEntity getTarget() {
    return target;
  }

}
