Class CatalogHandler
java.lang.Object
org.apache.polaris.service.catalog.common.CatalogHandler
- Direct Known Subclasses:
GenericTableCatalogHandler,IcebergCatalogHandler,PolicyCatalogHandler
An ABC for catalog wrappers which provides authorize methods that should be called before a
request is actually forwarded to a catalog. Child types must implement `initializeCatalog` which
will be called after a successful authorization.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final org.apache.polaris.core.auth.PolarisAuthorizerprotected final org.apache.polaris.core.context.CallContextprotected final Stringprotected final org.apache.polaris.core.credentials.PolarisCredentialManagerprotected final org.apache.polaris.core.PolarisDiagnosticsprotected final jakarta.enterprise.inject.Instance<org.apache.polaris.core.catalog.ExternalCatalogFactory> protected final org.apache.polaris.core.auth.PolarisPrincipalprotected final org.apache.polaris.core.config.RealmConfigprotected org.apache.polaris.core.persistence.resolver.PolarisResolutionManifestprotected final org.apache.polaris.core.persistence.resolver.ResolutionManifestFactory -
Constructor Summary
ConstructorsConstructorDescriptionCatalogHandler(org.apache.polaris.core.PolarisDiagnostics diagnostics, org.apache.polaris.core.context.CallContext callContext, org.apache.polaris.core.persistence.resolver.ResolutionManifestFactory resolutionManifestFactory, org.apache.polaris.core.auth.PolarisPrincipal principal, String catalogName, org.apache.polaris.core.auth.PolarisAuthorizer authorizer, org.apache.polaris.core.credentials.PolarisCredentialManager credentialManager, jakarta.enterprise.inject.Instance<org.apache.polaris.core.catalog.ExternalCatalogFactory> externalCatalogFactories) -
Method Summary
Modifier and TypeMethodDescriptionprotected voidauthorizeBasicNamespaceOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.iceberg.catalog.Namespace namespace) protected voidauthorizeBasicNamespaceOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.iceberg.catalog.Namespace namespace, List<org.apache.iceberg.catalog.Namespace> extraPassthroughNamespaces, List<org.apache.iceberg.catalog.TableIdentifier> extraPassthroughTableLikes, List<org.apache.polaris.service.types.PolicyIdentifier> extraPassThroughPolicies) protected voidauthorizeBasicTableLikeOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.polaris.core.entity.PolarisEntitySubType subType, org.apache.iceberg.catalog.TableIdentifier identifier) protected voidauthorizeBasicTableLikeOperationsOrThrow(EnumSet<org.apache.polaris.core.auth.PolarisAuthorizableOperation> ops, org.apache.polaris.core.entity.PolarisEntitySubType subType, org.apache.iceberg.catalog.TableIdentifier identifier) protected voidauthorizeCollectionOfTableLikeOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.polaris.core.entity.PolarisEntitySubType subType, List<org.apache.iceberg.catalog.TableIdentifier> ids) protected voidauthorizeCreateNamespaceUnderNamespaceOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.iceberg.catalog.Namespace namespace) protected voidauthorizeCreateTableLikeUnderNamespaceOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.iceberg.catalog.TableIdentifier identifier) protected voidauthorizeRenameTableLikeOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.polaris.core.entity.PolarisEntitySubType subType, org.apache.iceberg.catalog.TableIdentifier src, org.apache.iceberg.catalog.TableIdentifier dst) protected voidensureResolutionManifestForTable(org.apache.iceberg.catalog.TableIdentifier identifier) Ensures resolution manifest is initialized for a table identifier.protected org.apache.polaris.core.credentials.PolarisCredentialManagerprotected abstract voidInitialize the catalog once authorized.protected org.apache.polaris.core.persistence.resolver.PolarisResolutionManifeststatic voidthrowNotFoundExceptionForTableLikeEntity(org.apache.iceberg.catalog.TableIdentifier identifier, List<org.apache.polaris.core.entity.PolarisEntitySubType> subTypes) Helper function for when a TABLE_LIKE entity is not found so we want to throw the appropriate exception.
-
Field Details
-
resolutionManifest
protected org.apache.polaris.core.persistence.resolver.PolarisResolutionManifest resolutionManifest -
resolutionManifestFactory
protected final org.apache.polaris.core.persistence.resolver.ResolutionManifestFactory resolutionManifestFactory -
catalogName
-
authorizer
protected final org.apache.polaris.core.auth.PolarisAuthorizer authorizer -
credentialManager
protected final org.apache.polaris.core.credentials.PolarisCredentialManager credentialManager -
externalCatalogFactories
protected final jakarta.enterprise.inject.Instance<org.apache.polaris.core.catalog.ExternalCatalogFactory> externalCatalogFactories -
diagnostics
protected final org.apache.polaris.core.PolarisDiagnostics diagnostics -
callContext
protected final org.apache.polaris.core.context.CallContext callContext -
realmConfig
protected final org.apache.polaris.core.config.RealmConfig realmConfig -
polarisPrincipal
protected final org.apache.polaris.core.auth.PolarisPrincipal polarisPrincipal
-
-
Constructor Details
-
CatalogHandler
public CatalogHandler(org.apache.polaris.core.PolarisDiagnostics diagnostics, org.apache.polaris.core.context.CallContext callContext, org.apache.polaris.core.persistence.resolver.ResolutionManifestFactory resolutionManifestFactory, org.apache.polaris.core.auth.PolarisPrincipal principal, String catalogName, org.apache.polaris.core.auth.PolarisAuthorizer authorizer, org.apache.polaris.core.credentials.PolarisCredentialManager credentialManager, jakarta.enterprise.inject.Instance<org.apache.polaris.core.catalog.ExternalCatalogFactory> externalCatalogFactories)
-
-
Method Details
-
getPolarisCredentialManager
protected org.apache.polaris.core.credentials.PolarisCredentialManager getPolarisCredentialManager() -
newResolutionManifest
protected org.apache.polaris.core.persistence.resolver.PolarisResolutionManifest newResolutionManifest() -
initializeCatalog
protected abstract void initializeCatalog()Initialize the catalog once authorized. Called after all `authorize...` methods. -
authorizeBasicNamespaceOperationOrThrow
protected void authorizeBasicNamespaceOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.iceberg.catalog.Namespace namespace) -
authorizeBasicNamespaceOperationOrThrow
protected void authorizeBasicNamespaceOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.iceberg.catalog.Namespace namespace, List<org.apache.iceberg.catalog.Namespace> extraPassthroughNamespaces, List<org.apache.iceberg.catalog.TableIdentifier> extraPassthroughTableLikes, List<org.apache.polaris.service.types.PolicyIdentifier> extraPassThroughPolicies) -
authorizeCreateNamespaceUnderNamespaceOperationOrThrow
protected void authorizeCreateNamespaceUnderNamespaceOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.iceberg.catalog.Namespace namespace) -
authorizeCreateTableLikeUnderNamespaceOperationOrThrow
protected void authorizeCreateTableLikeUnderNamespaceOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.iceberg.catalog.TableIdentifier identifier) -
ensureResolutionManifestForTable
protected void ensureResolutionManifestForTable(org.apache.iceberg.catalog.TableIdentifier identifier) Ensures resolution manifest is initialized for a table identifier. This allows checking catalog-level feature flags or other resolved entities before authorization. If already initialized, this is a no-op. -
authorizeBasicTableLikeOperationOrThrow
protected void authorizeBasicTableLikeOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.polaris.core.entity.PolarisEntitySubType subType, org.apache.iceberg.catalog.TableIdentifier identifier) -
authorizeBasicTableLikeOperationsOrThrow
protected void authorizeBasicTableLikeOperationsOrThrow(EnumSet<org.apache.polaris.core.auth.PolarisAuthorizableOperation> ops, org.apache.polaris.core.entity.PolarisEntitySubType subType, org.apache.iceberg.catalog.TableIdentifier identifier) -
authorizeCollectionOfTableLikeOperationOrThrow
protected void authorizeCollectionOfTableLikeOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.polaris.core.entity.PolarisEntitySubType subType, List<org.apache.iceberg.catalog.TableIdentifier> ids) -
authorizeRenameTableLikeOperationOrThrow
protected void authorizeRenameTableLikeOperationOrThrow(org.apache.polaris.core.auth.PolarisAuthorizableOperation op, org.apache.polaris.core.entity.PolarisEntitySubType subType, org.apache.iceberg.catalog.TableIdentifier src, org.apache.iceberg.catalog.TableIdentifier dst) -
throwNotFoundExceptionForTableLikeEntity
public static void throwNotFoundExceptionForTableLikeEntity(org.apache.iceberg.catalog.TableIdentifier identifier, List<org.apache.polaris.core.entity.PolarisEntitySubType> subTypes) Helper function for when a TABLE_LIKE entity is not found so we want to throw the appropriate exception. Used in Iceberg APIs, so the Iceberg messages cannot be changed.- Parameters:
subTypes- The subtypes of the entity that the exception should report doesn't exist
-