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

smiklosovic pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 7ed0dc33d0 Add a test for checking permissions after grant authorize
7ed0dc33d0 is described below

commit 7ed0dc33d0f508cb006ebfbf41c5b015f83c56e0
Author: Valery Baranov <[email protected]>
AuthorDate: Tue Dec 2 10:06:16 2025 +0300

    Add a test for checking permissions after grant authorize
    
    patch by Valery Baranov; reviewed by Stefan Miklosovic, Brandon Williams 
for CASSANDRA-21051
---
 .../apache/cassandra/auth/GrantAndRevokeTest.java  | 40 ++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/test/unit/org/apache/cassandra/auth/GrantAndRevokeTest.java 
b/test/unit/org/apache/cassandra/auth/GrantAndRevokeTest.java
index 7b8a4cfb77..44abc70805 100644
--- a/test/unit/org/apache/cassandra/auth/GrantAndRevokeTest.java
+++ b/test/unit/org/apache/cassandra/auth/GrantAndRevokeTest.java
@@ -577,6 +577,46 @@ public class GrantAndRevokeTest extends CQLTester
         executeNet(ProtocolVersion.CURRENT, format("REVOKE SELECT PERMISSION 
ON KEYSPACE system_views FROM %s", user));
     }
 
+    @Test
+    public void testCheckPermissionsAfterAuthorize() throws Throwable
+    {
+        useSuperUser();
+
+        executeNet("CREATE KEYSPACE check_permissions WITH replication = 
{'class': 'SimpleStrategy', 'replication_factor': '1'}");
+        executeNet("CREATE TABLE check_permissions.t1 (k int PRIMARY KEY)");
+        executeNet("INSERT INTO check_permissions.t1 (k) VALUES (1)");
+
+        executeNet(String.format("CREATE ROLE %s WITH LOGIN = TRUE AND 
password='%s'", user, pass));
+
+        final String simple_user = "simple_user";
+        executeNet(String.format("CREATE ROLE %s WITH LOGIN = TRUE AND 
password='%s'", simple_user, simple_user));
+        executeNet("GRANT AUTHORIZE ON check_permissions.t1 TO " + 
simple_user);
+
+        useUser(user, pass);
+        assertUnauthorizedQuery("User user has no SELECT permission on <table 
check_permissions.t1> or any of its parents",
+                                "SELECT * FROM check_permissions.t1");
+
+        useUser(simple_user, simple_user);
+        assertUnauthorizedQuery("User simple_user has no SELECT permission on 
<table check_permissions.t1> or any of its parents",
+                                "SELECT * FROM check_permissions.t1");
+        assertUnauthorizedQuery("User simple_user has no SELECT permission on 
<table check_permissions.t1> or any of its parents",
+                                "GRANT SELECT ON check_permissions.t1 TO " + 
user);
+
+        useUser(user, pass);
+        assertUnauthorizedQuery("User user has no SELECT permission on <table 
check_permissions.t1> or any of its parents",
+                                "SELECT * FROM check_permissions.t1");
+
+        useSuperUser();
+        executeNet("GRANT SELECT ON check_permissions.t1 TO " + simple_user);
+
+        useUser(simple_user, simple_user);
+        executeNet("SELECT * FROM check_permissions.t1");
+        executeNet("GRANT SELECT ON check_permissions.t1 TO " + user);
+
+        useUser(user, pass);
+        executeNet("SELECT * FROM check_permissions.t1");
+    }
+
     private void maybeReadSystemTables(boolean superuser) throws Throwable
     {
         if (superuser)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to