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

liuxun 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 2e36a4d44c [#7875] fix(authz): List users API access control is 
ineffective (#7882)
2e36a4d44c is described below

commit 2e36a4d44caa9aa538dbc02b78c1add379abc7a6
Author: yangyang zhong <[email protected]>
AuthorDate: Fri Aug 1 10:34:44 2025 +0800

    [#7875] fix(authz): List users API access control is ineffective (#7882)
    
    ### What changes were proposed in this pull request?
    
    Fix list users API, access control is ineffective
    
    ### Why are the changes needed?
    
    Fix: 7875
    
    ### Does this PR introduce _any_ user-facing change?
    
    None
    
    ### How was this patch tested?
    
    
    
org.apache.gravitino.client.integration.test.authorization.UserAuthorizationIT
---
 .../test/authorization/UserAuthorizationIT.java       |  9 +++++++++
 .../gravitino/server/web/rest/UserOperations.java     | 19 ++++++++++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git 
a/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/UserAuthorizationIT.java
 
b/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/UserAuthorizationIT.java
index 225599fd3b..41b9725831 100644
--- 
a/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/UserAuthorizationIT.java
+++ 
b/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/UserAuthorizationIT.java
@@ -31,6 +31,7 @@ import org.apache.gravitino.authorization.Privileges;
 import org.apache.gravitino.authorization.User;
 import org.apache.gravitino.client.GravitinoAdminClient;
 import org.apache.gravitino.client.GravitinoMetalake;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.MethodOrderer;
 import org.junit.jupiter.api.Order;
 import org.junit.jupiter.api.Tag;
@@ -65,6 +66,14 @@ public class UserAuthorizationIT extends 
BaseRestApiAuthorizationIT {
           "user1",
         },
         usersLoadByUser1);
+    String[] usernames = client.loadMetalake(METALAKE).listUserNames();
+    Assertions.assertArrayEquals(new String[] {USER, NORMAL_USER, "user1", 
"user2"}, usernames);
+    String[] usernamesLoadByUser1 = 
getClientByUser("user1").loadMetalake(METALAKE).listUserNames();
+    Assertions.assertArrayEquals(
+        new String[] {
+          "user1",
+        },
+        usernamesLoadByUser1);
   }
 
   @Test
diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/rest/UserOperations.java 
b/server/src/main/java/org/apache/gravitino/server/web/rest/UserOperations.java
index b25b91a704..a3ee30e0c4 100644
--- 
a/server/src/main/java/org/apache/gravitino/server/web/rest/UserOperations.java
+++ 
b/server/src/main/java/org/apache/gravitino/server/web/rest/UserOperations.java
@@ -126,7 +126,24 @@ public class UserOperations {
                       .toArray(new User[0]);
               return Utils.ok(new 
UserListResponse(DTOConverters.toDTOs(users)));
             } else {
-              return Utils.ok(new 
NameListResponse(accessControlManager.listUserNames(metalake)));
+              String[] users = accessControlManager.listUserNames(metalake);
+              users =
+                  Arrays.stream(users)
+                      .filter(
+                          user -> {
+                            NameIdentifier[] nameIdentifiers =
+                                new NameIdentifier[] 
{NameIdentifierUtil.ofUser(metalake, user)};
+                            return MetadataFilterHelper.filterByExpression(
+                                        metalake,
+                                        "METALAKE::OWNER || 
MATALAKE::MANAGE_USERS || USER::SELF",
+                                        Entity.EntityType.USER,
+                                        nameIdentifiers)
+                                    .length
+                                > 0;
+                          })
+                      .collect(Collectors.toList())
+                      .toArray(new String[0]);
+              return Utils.ok(new NameListResponse(users));
             }
           });
     } catch (Exception e) {

Reply via email to