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

roryqi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 0b2a215bee [#7942] improvement(authz): Optimize authorization 
expression by text blocks (#8901)
0b2a215bee is described below

commit 0b2a215bee9a2ca42f36165954975768737b8723
Author: yangyang zhong <[email protected]>
AuthorDate: Fri Oct 24 11:10:22 2025 +0800

    [#7942] improvement(authz): Optimize authorization expression by text 
blocks (#8901)
    
    ### What changes were proposed in this pull request?
    
    Optimize authorization expression by text blocks
    
    ### Why are the changes needed?
    
    Optimize authorization expression by text blocks
    
    Fix: #7942
    
    ### Does this PR introduce _any_ user-facing change?
    
    None
    
    ### How was this patch tested?
    
    Existing test case
---
 .../AuthorizationExpressionConstants.java          | 62 +++++++++++++--------
 .../server/web/rest/FilesetOperations.java         | 24 +++++---
 .../gravitino/server/web/rest/ModelOperations.java | 64 ++++++++++++++--------
 .../gravitino/server/web/rest/TableOperations.java | 16 ++++--
 .../gravitino/server/web/rest/TopicOperations.java | 24 +++++---
 5 files changed, 119 insertions(+), 71 deletions(-)

diff --git 
a/server-common/src/main/java/org/apache/gravitino/server/authorization/expression/AuthorizationExpressionConstants.java
 
b/server-common/src/main/java/org/apache/gravitino/server/authorization/expression/AuthorizationExpressionConstants.java
index 486506ba6e..06bfaf9de4 100644
--- 
a/server-common/src/main/java/org/apache/gravitino/server/authorization/expression/AuthorizationExpressionConstants.java
+++ 
b/server-common/src/main/java/org/apache/gravitino/server/authorization/expression/AuthorizationExpressionConstants.java
@@ -21,28 +21,38 @@ public class AuthorizationExpressionConstants {
       "ANY_USE_CATALOG || ANY(OWNER, METALAKE, CATALOG)";
 
   public static final String loadSchemaAuthorizationExpression =
-      " ANY(OWNER, METALAKE, CATALOG) || "
-          + "ANY_USE_CATALOG && (SCHEMA::OWNER || ANY_USE_SCHEMA) ";
+      """
+          ANY(OWNER, METALAKE, CATALOG) ||
+          ANY_USE_CATALOG && (SCHEMA::OWNER || ANY_USE_SCHEMA)
+           """;
 
   public static final String loadModelAuthorizationExpression =
-      "ANY(OWNER, METALAKE, CATALOG) ||"
-          + " SCHEMA_OWNER_WITH_USE_CATALOG || "
-          + " ANY_USE_CATALOG && ANY_USE_SCHEMA && (MODEL::OWNER || 
ANY_USE_MODEL)";
+      """
+            ANY(OWNER, METALAKE, CATALOG) ||
+             SCHEMA_OWNER_WITH_USE_CATALOG ||
+              ANY_USE_CATALOG && ANY_USE_SCHEMA && (MODEL::OWNER || 
ANY_USE_MODEL)
+                  """;
 
   public static final String loadTableAuthorizationExpression =
-      "ANY(OWNER, METALAKE, CATALOG) ||"
-          + "SCHEMA_OWNER_WITH_USE_CATALOG ||"
-          + "ANY_USE_CATALOG && ANY_USE_SCHEMA  && (TABLE::OWNER || 
ANY_SELECT_TABLE || ANY_MODIFY_TABLE)";
+      """
+                  ANY(OWNER, METALAKE, CATALOG) ||
+                  SCHEMA_OWNER_WITH_USE_CATALOG ||
+                  ANY_USE_CATALOG && ANY_USE_SCHEMA  && (TABLE::OWNER || 
ANY_SELECT_TABLE || ANY_MODIFY_TABLE)
+                  """;
 
   public static final String loadTopicsAuthorizationExpression =
-      "ANY(OWNER, METALAKE, CATALOG) || "
-          + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-          + "ANY_USE_CATALOG && ANY_USE_SCHEMA && (TOPIC::OWNER || 
ANY_CONSUME_TOPIC || ANY_PRODUCE_TOPIC)";
+      """
+          ANY(OWNER, METALAKE, CATALOG) ||
+          SCHEMA_OWNER_WITH_USE_CATALOG ||
+          ANY_USE_CATALOG && ANY_USE_SCHEMA && (TOPIC::OWNER || 
ANY_CONSUME_TOPIC || ANY_PRODUCE_TOPIC)
+          """;
 
   public static final String loadFilesetAuthorizationExpression =
-      "ANY(OWNER, METALAKE, CATALOG) || "
-          + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-          + "ANY_USE_CATALOG && ANY_USE_SCHEMA && (FILESET::OWNER || 
ANY_READ_FILESET || ANY_WRITE_FILESET)";
+      """
+                 ANY(OWNER, METALAKE, CATALOG) ||
+                 SCHEMA_OWNER_WITH_USE_CATALOG ||
+                 ANY_USE_CATALOG && ANY_USE_SCHEMA && (FILESET::OWNER || 
ANY_READ_FILESET || ANY_WRITE_FILESET)
+                  """;
 
   public static final String filterSchemaAuthorizationExpression =
       "ANY(OWNER, METALAKE, CATALOG, SCHEMA) || ANY_USE_SCHEMA";
@@ -51,17 +61,23 @@ public class AuthorizationExpressionConstants {
       "ANY(OWNER, METALAKE, CATALOG, SCHEMA, MODEL) || ANY_USE_MODEL";
 
   public static final String filterTableAuthorizationExpression =
-      "ANY(OWNER, METALAKE, CATALOG, SCHEMA, TABLE) || "
-          + "ANY_SELECT_TABLE || "
-          + "ANY_MODIFY_TABLE";
+      """
+                  ANY(OWNER, METALAKE, CATALOG, SCHEMA, TABLE) ||
+                  ANY_SELECT_TABLE ||
+                  ANY_MODIFY_TABLE
+                  """;
 
   public static final String filterTopicsAuthorizationExpression =
-      "ANY(OWNER, METALAKE, CATALOG, SCHEMA, TOPIC) || "
-          + "ANY_CONSUME_TOPIC || "
-          + "ANY_PRODUCE_TOPIC";
+      """
+              ANY(OWNER, METALAKE, CATALOG, SCHEMA, TOPIC) ||
+              ANY_CONSUME_TOPIC ||
+              ANY_PRODUCE_TOPIC
+       """;
 
   public static final String filterFilesetAuthorizationExpression =
-      "ANY(OWNER, METALAKE, CATALOG, SCHEMA, FILESET) || "
-          + "ANY_READ_FILESET || "
-          + "ANY_WRITE_FILESET";
+      """
+              ANY(OWNER, METALAKE, CATALOG, SCHEMA, FILESET) ||
+              ANY_READ_FILESET ||
+              ANY_WRITE_FILESET
+                  """;
 }
diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/rest/FilesetOperations.java
 
b/server/src/main/java/org/apache/gravitino/server/web/rest/FilesetOperations.java
index b476ad9c36..3a5a0c2e07 100644
--- 
a/server/src/main/java/org/apache/gravitino/server/web/rest/FilesetOperations.java
+++ 
b/server/src/main/java/org/apache/gravitino/server/web/rest/FilesetOperations.java
@@ -132,9 +132,11 @@ public class FilesetOperations {
   @ResponseMetered(name = "create-fileset", absolute = true)
   @AuthorizationExpression(
       expression =
-          "ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && ANY_CREATE_FILESET",
+          """
+                      ANY(OWNER, METALAKE, CATALOG) ||
+                      SCHEMA_OWNER_WITH_USE_CATALOG ||
+                      ANY_USE_CATALOG && ANY_USE_SCHEMA && ANY_CREATE_FILESET
+                      """,
       accessMetadataType = MetadataObject.Type.SCHEMA)
   public Response createFileset(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -273,9 +275,11 @@ public class FilesetOperations {
   @ResponseMetered(name = "alter-fileset", absolute = true)
   @AuthorizationExpression(
       expression =
-          "ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && (FILESET::OWNER || 
ANY_WRITE_FILESET)",
+          """
+                      ANY(OWNER, METALAKE, CATALOG) ||
+                      SCHEMA_OWNER_WITH_USE_CATALOG ||
+                      ANY_USE_CATALOG && ANY_USE_SCHEMA && (FILESET::OWNER || 
ANY_WRITE_FILESET)
+                      """,
       accessMetadataType = MetadataObject.Type.FILESET)
   public Response alterFileset(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -313,9 +317,11 @@ public class FilesetOperations {
   @ResponseMetered(name = "drop-fileset", absolute = true)
   @AuthorizationExpression(
       expression =
-          "ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && FILESET::OWNER",
+          """
+                      ANY(OWNER, METALAKE, CATALOG) ||
+                      SCHEMA_OWNER_WITH_USE_CATALOG ||
+                      ANY_USE_CATALOG && ANY_USE_SCHEMA && FILESET::OWNER
+                      """,
       accessMetadataType = MetadataObject.Type.FILESET)
   public Response dropFileset(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/rest/ModelOperations.java
 
b/server/src/main/java/org/apache/gravitino/server/web/rest/ModelOperations.java
index 5c2e1ea7e2..b94a7780cf 100644
--- 
a/server/src/main/java/org/apache/gravitino/server/web/rest/ModelOperations.java
+++ 
b/server/src/main/java/org/apache/gravitino/server/web/rest/ModelOperations.java
@@ -160,9 +160,11 @@ public class ModelOperations {
   @ResponseMetered(name = "register-model", absolute = true)
   @AuthorizationExpression(
       expression =
-          " ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && ANY_CREATE_MODEL",
+          """
+                      ANY(OWNER, METALAKE, CATALOG) ||
+                      SCHEMA_OWNER_WITH_USE_CATALOG ||
+                      ANY_USE_CATALOG && ANY_USE_SCHEMA && ANY_CREATE_MODEL
+                      """,
       accessMetadataType = MetadataObject.Type.SCHEMA)
   public Response registerModel(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -205,9 +207,11 @@ public class ModelOperations {
   @ResponseMetered(name = "delete-model", absolute = true)
   @AuthorizationExpression(
       expression =
-          " ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER",
+          """
+                      ANY(OWNER, METALAKE, CATALOG) ||
+                      SCHEMA_OWNER_WITH_USE_CATALOG ||
+                      ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER
+                      """,
       accessMetadataType = MetadataObject.Type.MODEL)
   public Response deleteModel(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -401,9 +405,11 @@ public class ModelOperations {
   @ResponseMetered(name = "link-model-version", absolute = true)
   @AuthorizationExpression(
       expression =
-          " ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && (MODEL::OWNER || 
ANY_USE_MODEL && ANY_CREATE_MODEL_VERSION)",
+          """
+                    ANY(OWNER, METALAKE, CATALOG) ||
+                    SCHEMA_OWNER_WITH_USE_CATALOG ||
+                    ANY_USE_CATALOG && ANY_USE_SCHEMA && (MODEL::OWNER || 
ANY_USE_MODEL && ANY_CREATE_MODEL_VERSION)
+                      """,
       accessMetadataType = MetadataObject.Type.MODEL)
   public Response linkModelVersion(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -449,9 +455,11 @@ public class ModelOperations {
   @ResponseMetered(name = "delete-model-version", absolute = true)
   @AuthorizationExpression(
       expression =
-          " ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER",
+          """
+                      ANY(OWNER, METALAKE, CATALOG) ||
+                      SCHEMA_OWNER_WITH_USE_CATALOG ||
+                      ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER
+                      """,
       accessMetadataType = MetadataObject.Type.MODEL)
   public Response deleteModelVersion(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -496,9 +504,11 @@ public class ModelOperations {
   @ResponseMetered(name = "delete-model-alias", absolute = true)
   @AuthorizationExpression(
       expression =
-          " ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER",
+          """
+                      ANY(OWNER, METALAKE, CATALOG) ||
+                      SCHEMA_OWNER_WITH_USE_CATALOG ||
+                      ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER
+                      """,
       accessMetadataType = MetadataObject.Type.MODEL)
   public Response deleteModelVersionByAlias(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -544,9 +554,11 @@ public class ModelOperations {
   @ResponseMetered(name = "alter-model-version", absolute = true)
   @AuthorizationExpression(
       expression =
-          " ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER",
+          """
+                      ANY(OWNER, METALAKE, CATALOG) ||
+                      SCHEMA_OWNER_WITH_USE_CATALOG ||
+                      ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER
+                      """,
       accessMetadataType = MetadataObject.Type.MODEL)
   public Response alterModelVersion(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -597,9 +609,11 @@ public class ModelOperations {
   @ResponseMetered(name = "alter-model-alias", absolute = true)
   @AuthorizationExpression(
       expression =
-          " ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER",
+          """
+                     ANY(OWNER, METALAKE, CATALOG) ||
+                     SCHEMA_OWNER_WITH_USE_CATALOG ||
+                     ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER
+                      """,
       accessMetadataType = MetadataObject.Type.MODEL)
   public Response alterModelVersionByAlias(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -649,9 +663,11 @@ public class ModelOperations {
   @ResponseMetered(name = "alter-model", absolute = true)
   @AuthorizationExpression(
       expression =
-          " ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER",
+          """
+                      ANY(OWNER, METALAKE, CATALOG) ||
+                      SCHEMA_OWNER_WITH_USE_CATALOG ||
+                      ANY_USE_CATALOG && ANY_USE_SCHEMA && MODEL::OWNER
+                      """,
       accessMetadataType = MetadataObject.Type.MODEL)
   public Response alterModel(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/rest/TableOperations.java
 
b/server/src/main/java/org/apache/gravitino/server/web/rest/TableOperations.java
index 8c79b6ee26..ec47cf8e64 100644
--- 
a/server/src/main/java/org/apache/gravitino/server/web/rest/TableOperations.java
+++ 
b/server/src/main/java/org/apache/gravitino/server/web/rest/TableOperations.java
@@ -199,9 +199,11 @@ public class TableOperations {
   @ResponseMetered(name = "alter-table", absolute = true)
   @AuthorizationExpression(
       expression =
-          "ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA  && (TABLE::OWNER || 
ANY_MODIFY_TABLE)",
+          """
+                      ANY(OWNER, METALAKE, CATALOG) ||
+                       SCHEMA_OWNER_WITH_USE_CATALOG ||
+                       ANY_USE_CATALOG && ANY_USE_SCHEMA  && (TABLE::OWNER || 
ANY_MODIFY_TABLE)
+                      """,
       accessMetadataType = MetadataObject.Type.TABLE)
   public Response alterTable(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -239,9 +241,11 @@ public class TableOperations {
   @ResponseMetered(name = "drop-table", absolute = true)
   @AuthorizationExpression(
       expression =
-          "ANY(OWNER, METALAKE, CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA  && TABLE::OWNER ",
+          """
+              ANY(OWNER, METALAKE, CATALOG) ||
+              SCHEMA_OWNER_WITH_USE_CATALOG ||
+              ANY_USE_CATALOG && ANY_USE_SCHEMA  && TABLE::OWNER
+              """,
       accessMetadataType = MetadataObject.Type.TABLE)
   public Response dropTable(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/rest/TopicOperations.java
 
b/server/src/main/java/org/apache/gravitino/server/web/rest/TopicOperations.java
index 6eb04d4c13..79f0b270f7 100644
--- 
a/server/src/main/java/org/apache/gravitino/server/web/rest/TopicOperations.java
+++ 
b/server/src/main/java/org/apache/gravitino/server/web/rest/TopicOperations.java
@@ -112,9 +112,11 @@ public class TopicOperations {
   @ResponseMetered(name = "create-topic", absolute = true)
   @AuthorizationExpression(
       expression =
-          "ANY(OWNER,METALAKE,CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && ANY_CREATE_TOPIC",
+          """
+                      ANY(OWNER,METALAKE,CATALOG) ||
+                      SCHEMA_OWNER_WITH_USE_CATALOG ||
+                      ANY_USE_CATALOG && ANY_USE_SCHEMA && ANY_CREATE_TOPIC
+                      """,
       accessMetadataType = MetadataObject.Type.SCHEMA)
   public Response createTopic(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -192,9 +194,11 @@ public class TopicOperations {
   @ResponseMetered(name = "alter-topic", absolute = true)
   @AuthorizationExpression(
       expression =
-          "ANY(OWNER,METALAKE,CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && (TOPIC::OWNER || 
ANY_PRODUCE_TOPIC)",
+          """
+                    ANY(OWNER,METALAKE,CATALOG) ||
+                    SCHEMA_OWNER_WITH_USE_CATALOG ||
+                    ANY_USE_CATALOG && ANY_USE_SCHEMA && (TOPIC::OWNER || 
ANY_PRODUCE_TOPIC)
+                      """,
       accessMetadataType = MetadataObject.Type.TOPIC)
   public Response alterTopic(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)
@@ -233,9 +237,11 @@ public class TopicOperations {
   @ResponseMetered(name = "drop-topic", absolute = true)
   @AuthorizationExpression(
       expression =
-          "ANY(OWNER,METALAKE,CATALOG) || "
-              + "SCHEMA_OWNER_WITH_USE_CATALOG || "
-              + "ANY_USE_CATALOG && ANY_USE_SCHEMA && TOPIC::OWNER",
+          """
+                      ANY(OWNER,METALAKE,CATALOG) ||
+                      SCHEMA_OWNER_WITH_USE_CATALOG ||
+                      ANY_USE_CATALOG && ANY_USE_SCHEMA && TOPIC::OWNER
+                      """,
       accessMetadataType = MetadataObject.Type.TOPIC)
   public Response dropTopic(
       @PathParam("metalake") @AuthorizationMetadata(type = 
Entity.EntityType.METALAKE)

Reply via email to