Package com.datahub.authorization
Class AuthUtil
java.lang.Object
com.datahub.authorization.AuthUtil
Notes: This class is an attempt to unify privilege checks across APIs.
Public: The intent is that the public interface uses the typical abstractions for Urns, ApiOperation, ApiGroup, and entity type strings
Private functions can use the more specific Privileges, Disjunctive/Conjunctive interfaces required for the policy engine and authorizer
isAPI...() functions are intended for OpenAPI and Rest.li since they are governed by an enable flag. GraphQL is always enabled and should use is...() functions.
-
Field Summary
FieldsModifier and TypeFieldDescriptionThis should generally follow the policy creation UI with a few exceptions for users, groups, containers, etc so that the platform still functions as expected. -
Method Summary
Modifier and TypeMethodDescriptionstatic DisjunctivePrivilegeGroupbuildDisjunctivePrivilegeGroup(com.linkedin.metadata.authorization.ApiGroup apiGroup, com.linkedin.metadata.authorization.ApiOperation apiOperation, String entityType) static booleancanViewEntity(AuthorizationSession session, com.linkedin.common.urn.Urn urn) GraphQL Methodsstatic booleancanViewEntity(AuthorizationSession session, Collection<com.linkedin.common.urn.Urn> urns) static booleanisAPIAuthorized(AuthorizationSession session, com.linkedin.metadata.authorization.ApiGroup apiGroup, com.linkedin.metadata.authorization.ApiOperation apiOperation) isAPIAuthorized(AuthorizationSession session, com.linkedin.metadata.authorization.ApiGroup apiGroup, com.linkedin.metadata.models.registry.EntityRegistry entityRegistry, Collection<com.linkedin.mxe.MetadataChangeProposal> mcps) OpenAPI/Rest.li Methodsstatic booleanisAPIAuthorized(AuthorizationSession session, com.linkedin.metadata.authorization.PoliciesConfig.Privilege privilege) static booleanisAPIAuthorized(AuthorizationSession session, com.linkedin.metadata.authorization.PoliciesConfig.Privilege privilege, EntitySpec resource) static booleanisAPIAuthorizedEntityType(AuthorizationSession session, com.linkedin.metadata.authorization.ApiGroup apiGroup, com.linkedin.metadata.authorization.ApiOperation apiOperation, String entityType) static booleanisAPIAuthorizedEntityType(AuthorizationSession session, com.linkedin.metadata.authorization.ApiGroup apiGroup, com.linkedin.metadata.authorization.ApiOperation apiOperation, Collection<String> entityTypes) static booleanisAPIAuthorizedEntityType(AuthorizationSession session, com.linkedin.metadata.authorization.ApiOperation apiOperation, String entityType) static booleanisAPIAuthorizedEntityType(AuthorizationSession session, com.linkedin.metadata.authorization.ApiOperation apiOperation, Collection<String> entityTypes) static booleanisAPIAuthorizedEntityUrns(AuthorizationSession session, com.linkedin.metadata.authorization.ApiOperation apiOperation, Collection<com.linkedin.common.urn.Urn> urns) static booleanisAPIAuthorizedResult(AuthorizationSession session, com.linkedin.metadata.browse.BrowseResult result) static booleanisAPIAuthorizedResult(AuthorizationSession session, com.linkedin.metadata.query.AutoCompleteResult result) static booleanisAPIAuthorizedResult(AuthorizationSession session, com.linkedin.metadata.search.ScrollResult result) static booleanisAPIAuthorizedResult(AuthorizationSession session, com.linkedin.metadata.search.SearchResult result) static booleanisAPIAuthorizedUrns(AuthorizationSession session, com.linkedin.metadata.authorization.ApiGroup apiGroup, com.linkedin.metadata.authorization.ApiOperation apiOperation, Collection<com.linkedin.common.urn.Urn> urns) static Map<com.linkedin.util.Pair<com.linkedin.events.metadata.ChangeType,com.linkedin.common.urn.Urn>, Integer> isAPIAuthorizedUrns(AuthorizationSession session, com.linkedin.metadata.authorization.ApiGroup apiGroup, Collection<com.linkedin.util.Pair<com.linkedin.events.metadata.ChangeType, com.linkedin.common.urn.Urn>> changeTypeUrns) static booleanisAuthorized(AuthorizationSession session, DisjunctivePrivilegeGroup privilegeGroup, EntitySpec resourceSpec) static booleanisAuthorized(AuthorizationSession session, com.linkedin.metadata.authorization.ApiGroup apiGroup, com.linkedin.metadata.authorization.ApiOperation apiOperation) static booleanisAuthorized(AuthorizationSession session, com.linkedin.metadata.authorization.PoliciesConfig.Privilege privilege) static booleanisAuthorized(AuthorizationSession session, com.linkedin.metadata.authorization.PoliciesConfig.Privilege privilege, EntitySpec entitySpec) static booleanisAuthorizedEntityType(AuthorizationSession session, com.linkedin.metadata.authorization.ApiOperation apiOperation, Collection<String> entityTypes) static booleanisAuthorizedEntityUrns(AuthorizationSession session, com.linkedin.metadata.authorization.ApiOperation apiOperation, Collection<com.linkedin.common.urn.Urn> urns) static booleanisAuthorizedUrns(AuthorizationSession session, com.linkedin.metadata.authorization.ApiGroup apiGroup, com.linkedin.metadata.authorization.ApiOperation apiOperation, Collection<com.linkedin.common.urn.Urn> urns) static com.linkedin.metadata.authorization.Disjunctive<com.linkedin.metadata.authorization.Conjunctive<com.linkedin.metadata.authorization.PoliciesConfig.Privilege>>lookupAPIPrivilege(com.linkedin.metadata.authorization.ApiGroup apiGroup, com.linkedin.metadata.authorization.ApiOperation apiOperation, String entityType) Based on an API group and operation return privileges.
-
Field Details
-
VIEW_RESTRICTED_ENTITY_TYPES
This should generally follow the policy creation UI with a few exceptions for users, groups, containers, etc so that the platform still functions as expected.
-
-
Method Details
-
isAPIAuthorized
public static List<com.linkedin.util.Pair<com.linkedin.mxe.MetadataChangeProposal,Integer>> isAPIAuthorized(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiGroup apiGroup, @Nonnull com.linkedin.metadata.models.registry.EntityRegistry entityRegistry, @Nonnull Collection<com.linkedin.mxe.MetadataChangeProposal> mcps) OpenAPI/Rest.li Methods -
isAPIAuthorizedUrns
public static Map<com.linkedin.util.Pair<com.linkedin.events.metadata.ChangeType,com.linkedin.common.urn.Urn>, isAPIAuthorizedUrnsInteger> (@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiGroup apiGroup, @Nonnull Collection<com.linkedin.util.Pair<com.linkedin.events.metadata.ChangeType, com.linkedin.common.urn.Urn>> changeTypeUrns) -
isAPIAuthorizedResult
public static boolean isAPIAuthorizedResult(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.search.SearchResult result) -
isAPIAuthorizedResult
public static boolean isAPIAuthorizedResult(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.search.ScrollResult result) -
isAPIAuthorizedResult
public static boolean isAPIAuthorizedResult(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.query.AutoCompleteResult result) -
isAPIAuthorizedResult
public static boolean isAPIAuthorizedResult(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.browse.BrowseResult result) -
isAPIAuthorizedUrns
public static boolean isAPIAuthorizedUrns(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiGroup apiGroup, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation, @Nonnull Collection<com.linkedin.common.urn.Urn> urns) -
isAPIAuthorizedEntityUrns
public static boolean isAPIAuthorizedEntityUrns(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation, @Nonnull Collection<com.linkedin.common.urn.Urn> urns) -
isAPIAuthorizedEntityType
public static boolean isAPIAuthorizedEntityType(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation, @Nonnull String entityType) -
isAPIAuthorizedEntityType
public static boolean isAPIAuthorizedEntityType(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiGroup apiGroup, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation, @Nonnull String entityType) -
isAPIAuthorizedEntityType
public static boolean isAPIAuthorizedEntityType(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation, @Nonnull Collection<String> entityTypes) -
isAPIAuthorizedEntityType
public static boolean isAPIAuthorizedEntityType(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiGroup apiGroup, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation, @Nonnull Collection<String> entityTypes) -
isAPIAuthorized
public static boolean isAPIAuthorized(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiGroup apiGroup, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation) -
isAPIAuthorized
public static boolean isAPIAuthorized(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.PoliciesConfig.Privilege privilege, @Nullable EntitySpec resource) -
isAPIAuthorized
public static boolean isAPIAuthorized(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.PoliciesConfig.Privilege privilege) -
canViewEntity
public static boolean canViewEntity(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.common.urn.Urn urn) GraphQL Methods -
canViewEntity
public static boolean canViewEntity(@Nonnull AuthorizationSession session, @Nonnull Collection<com.linkedin.common.urn.Urn> urns) -
isAuthorized
public static boolean isAuthorized(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiGroup apiGroup, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation) -
isAuthorizedEntityType
public static boolean isAuthorizedEntityType(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation, @Nonnull Collection<String> entityTypes) -
isAuthorizedEntityUrns
public static boolean isAuthorizedEntityUrns(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation, @Nonnull Collection<com.linkedin.common.urn.Urn> urns) -
isAuthorizedUrns
public static boolean isAuthorizedUrns(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.ApiGroup apiGroup, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation, @Nonnull Collection<com.linkedin.common.urn.Urn> urns) -
isAuthorized
public static boolean isAuthorized(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.PoliciesConfig.Privilege privilege) -
isAuthorized
public static boolean isAuthorized(@Nonnull AuthorizationSession session, @Nonnull com.linkedin.metadata.authorization.PoliciesConfig.Privilege privilege, @Nullable EntitySpec entitySpec) -
isAuthorized
public static boolean isAuthorized(@Nonnull AuthorizationSession session, @Nonnull DisjunctivePrivilegeGroup privilegeGroup, @Nullable EntitySpec resourceSpec) -
lookupAPIPrivilege
public static com.linkedin.metadata.authorization.Disjunctive<com.linkedin.metadata.authorization.Conjunctive<com.linkedin.metadata.authorization.PoliciesConfig.Privilege>> lookupAPIPrivilege(@Nonnull com.linkedin.metadata.authorization.ApiGroup apiGroup, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation, @Nullable String entityType) Based on an API group and operation return privileges. Broad level privileges that are not specific to an Entity/Aspect.- Parameters:
apiGroup-apiOperation-- Returns:
-
buildDisjunctivePrivilegeGroup
public static DisjunctivePrivilegeGroup buildDisjunctivePrivilegeGroup(@Nonnull com.linkedin.metadata.authorization.ApiGroup apiGroup, @Nonnull com.linkedin.metadata.authorization.ApiOperation apiOperation, @Nullable String entityType)
-