blob: 75f437d398da5433068a83d0812d76438a701c59 [file] [log] [blame]
// 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.impala.authorization;
import java.util.Objects;
import java.util.List;
import com.google.common.base.Strings;
/*
* Abstract class representing an authorizable object (Table, Db, Column, etc).
*/
public abstract class Authorizable {
public enum Type {
SERVER,
DB,
TABLE,
COLUMN,
FUNCTION,
URI
}
// Returns the name of the object.
public abstract String getName();
// Returns the type of the authorizable.
public abstract Type getType();
// Returns the full table name if applicable, null otherwise.
public String getFullTableName() { return null; }
// Returns the table name if applicable, null otherwise.
public String getTableName() { return null; }
// Returns the database name if applicable, null otherwise.
public String getDbName() { return null; }
// Returns the column name if applicable, null otherwise.
public String getColumnName() { return null; }
// Returns the function name if applicable, null otherwise.
public String getFnName() { return null; }
// Returns the owner for this authorizable if applicable, null otherwise.
// Currently, ownership is applicable only for database and table objects.
// Only used by RangerAuthorizationChecker.
public String getOwnerUser() { return null; }
@Override
public int hashCode() {
int ownerHash = getOwnerUser() == null ? 0 : getOwnerUser().hashCode();
int nameHash = getName().hashCode();
return nameHash * 31 + ownerHash;
}
@Override
public boolean equals(Object o) {
if (o == null) return false;
if (o.getClass() != this.getClass()) return false;
Authorizable temp = (Authorizable) o;
return temp.getName().equals(this.getName())
&& Strings.nullToEmpty(temp.getOwnerUser()).equals(
Strings.nullToEmpty(this.getOwnerUser()));
}
}