This is an automated email from the ASF dual-hosted git repository.

yuqi4733 pushed a commit to branch branch-1.1
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-1.1 by this push:
     new 3a230c3b7f [MINOR] polish(authz): polish authz codes for easier reuse 
(#9419)
3a230c3b7f is described below

commit 3a230c3b7ffaef760a54b0cfeb783cf98625dd4e
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Dec 9 15:37:09 2025 +0800

    [MINOR] polish(authz): polish authz codes for easier reuse (#9419)
    
    ### What changes were proposed in this pull request?
    
    can specify a principal
    
    ### Why are the changes needed?
    
    polish authz codes for easier reuse
    
    ### Does this PR introduce _any_ user-facing change?
    
    no
    
    ### How was this patch tested?
    
    CI passed
    
    Co-authored-by: mchades <[email protected]>
---
 .../server/authorization/MetadataAuthzHelper.java  | 51 +++++++++++++---------
 1 file changed, 30 insertions(+), 21 deletions(-)

diff --git 
a/server-common/src/main/java/org/apache/gravitino/server/authorization/MetadataAuthzHelper.java
 
b/server-common/src/main/java/org/apache/gravitino/server/authorization/MetadataAuthzHelper.java
index ffa32bc294..15d5f542ad 100644
--- 
a/server-common/src/main/java/org/apache/gravitino/server/authorization/MetadataAuthzHelper.java
+++ 
b/server-common/src/main/java/org/apache/gravitino/server/authorization/MetadataAuthzHelper.java
@@ -64,6 +64,7 @@ public class MetadataAuthzHelper {
     return doFilter(
         expression,
         metalakes,
+        PrincipalUtils.getCurrentPrincipal(),
         GravitinoAuthorizerProvider.getInstance().getGravitinoAuthorizer(),
         authorizationRequestContext,
         metalake -> {
@@ -72,7 +73,8 @@ public class MetadataAuthzHelper {
               metalakeName,
               Entity.EntityType.METALAKE,
               NameIdentifierUtil.ofMetalake(metalakeName));
-        });
+        },
+        (unused) -> null);
   }
 
   /**
@@ -87,6 +89,7 @@ public class MetadataAuthzHelper {
     return doFilter(
         AuthorizationExpressionConstants.CAN_ACCESS_METADATA,
         metadataObjects,
+        PrincipalUtils.getCurrentPrincipal(),
         GravitinoAuthorizerProvider.getInstance().getGravitinoAuthorizer(),
         new AuthorizationRequestContext(),
         metadataObject ->
@@ -109,6 +112,7 @@ public class MetadataAuthzHelper {
     return doFilter(
         AuthorizationExpressionConstants.CAN_ACCESS_METADATA,
         metadataObjects,
+        PrincipalUtils.getCurrentPrincipal(),
         GravitinoAuthorizerProvider.getInstance().getGravitinoAuthorizer(),
         new AuthorizationRequestContext(),
         metadataObject ->
@@ -178,8 +182,18 @@ public class MetadataAuthzHelper {
       Function<E, NameIdentifier> toNameIdentifier) {
     GravitinoAuthorizer authorizer =
         GravitinoAuthorizerProvider.getInstance().getGravitinoAuthorizer();
-    return filterByExpression(
-        metalake, expression, entityType, entities, toNameIdentifier, 
authorizer);
+    AuthorizationRequestContext authorizationRequestContext = new 
AuthorizationRequestContext();
+    return doFilter(
+        expression,
+        entities,
+        PrincipalUtils.getCurrentPrincipal(),
+        authorizer,
+        authorizationRequestContext,
+        (entity) -> {
+          NameIdentifier nameIdentifier = toNameIdentifier.apply(entity);
+          return splitMetadataNames(metalake, entityType, nameIdentifier);
+        },
+        (unused) -> null);
   }
 
   /**
@@ -191,7 +205,12 @@ public class MetadataAuthzHelper {
    * @param entityType entity type
    * @param entities metadata entities
    * @param toNameIdentifier function to convert entity to NameIdentifier
-   * @param authorizer authorizer to filter metadata
+   * @param currentPrincipal The principal to perform the authorization check 
as. This is intended
+   *     as an extension point for external modules to inject a specific 
security context, so please
+   *     do not remove it.
+   * @param authorizer The authorizer to use for the authorization check. This 
is intended as an
+   *     extension point for external modules to inject a specific 
authorization mechanism, so
+   *     please do not remove it.
    * @return Filtered Metadata Entity
    * @param <E> Entity class
    */
@@ -201,17 +220,20 @@ public class MetadataAuthzHelper {
       Entity.EntityType entityType,
       E[] entities,
       Function<E, NameIdentifier> toNameIdentifier,
+      Principal currentPrincipal,
       GravitinoAuthorizer authorizer) {
     AuthorizationRequestContext authorizationRequestContext = new 
AuthorizationRequestContext();
     return doFilter(
         expression,
         entities,
+        currentPrincipal,
         authorizer,
         authorizationRequestContext,
         (entity) -> {
           NameIdentifier nameIdentifier = toNameIdentifier.apply(entity);
           return splitMetadataNames(metalake, entityType, nameIdentifier);
-        });
+        },
+        (unused) -> null);
   }
 
   /**
@@ -219,30 +241,18 @@ public class MetadataAuthzHelper {
    *
    * @param expression The authorization expression to evaluate
    * @param entities The array of entities to filter
+   * @param currentPrincipal The principal used to evaluate permissions
    * @param authorizer The authorizer used to evaluate permissions
    * @param authorizationRequestContext The context of the authorization 
request
    * @param extractMetadataNamesMap Function to extract metadata names map 
from entity
+   * @param extractEntityType Function to extract entity type from entity
    * @param <E> The type of entity
    * @return Filtered array of entities that passed authorization check
    */
   private static <E> E[] doFilter(
       String expression,
       E[] entities,
-      GravitinoAuthorizer authorizer,
-      AuthorizationRequestContext authorizationRequestContext,
-      Function<E, Map<Entity.EntityType, NameIdentifier>> 
extractMetadataNamesMap) {
-    return doFilter(
-        expression,
-        entities,
-        authorizer,
-        authorizationRequestContext,
-        extractMetadataNamesMap,
-        (unused) -> null);
-  }
-
-  private static <E> E[] doFilter(
-      String expression,
-      E[] entities,
+      Principal currentPrincipal,
       GravitinoAuthorizer authorizer,
       AuthorizationRequestContext authorizationRequestContext,
       Function<E, Map<Entity.EntityType, NameIdentifier>> 
extractMetadataNamesMap,
@@ -251,7 +261,6 @@ public class MetadataAuthzHelper {
       return entities;
     }
     checkExecutor();
-    Principal currentPrincipal = PrincipalUtils.getCurrentPrincipal();
     authorizationRequestContext.setOriginalAuthorizationExpression(expression);
     List<CompletableFuture<E>> futures = new ArrayList<>();
     for (E entity : entities) {

Reply via email to