Repository: cassandra
Updated Branches:
  refs/heads/trunk c610b3123 -> a1b574e52


Make custom role options accessible from IRoleManager

patch by Sam Tunnicliffe; reviewed by Aleksey Yeschenko for
CASSANDRA-8761


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a1b574e5
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a1b574e5
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a1b574e5

Branch: refs/heads/trunk
Commit: a1b574e52e363e1f9cf46496d4acc5bcd3436d96
Parents: c610b31
Author: Sam Tunnicliffe <[email protected]>
Authored: Thu Mar 5 21:52:51 2015 -0800
Committer: Aleksey Yeschenko <[email protected]>
Committed: Thu Mar 5 21:52:51 2015 -0800

----------------------------------------------------------------------
 CHANGES.txt                                              |  4 ++--
 .../org/apache/cassandra/auth/CassandraRoleManager.java  |  5 +++++
 src/java/org/apache/cassandra/auth/IRoleManager.java     | 11 +++++++++++
 .../cassandra/cql3/statements/ListRolesStatement.java    | 10 +++++++---
 4 files changed, 25 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/a1b574e5/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index e7bc034..e1efa3b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,6 @@
 3.0
- * use preloaded jemalloc w/ Unsafe (CASSANDRA-8714)
- * Add role based access control (CASSANDRA-7653, 8650, 7216, 8760, 8849)
+ * Use preloaded jemalloc w/ Unsafe (CASSANDRA-8714)
+ * Add role based access control (CASSANDRA-7653, 8650, 7216, 8760, 8849, 8761)
  * Avoid accessing partitioner through StorageProxy (CASSANDRA-8244, 8268)
  * Upgrade Metrics library and remove depricated metrics (CASSANDRA-5657)
  * Serializing Row cache alternative, fully off heap (CASSANDRA-7438)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a1b574e5/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/CassandraRoleManager.java 
b/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
index 6139e5d..36c57d4 100644
--- a/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
+++ b/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
@@ -292,6 +292,11 @@ public class CassandraRoleManager implements IRoleManager
         return getRole(role.getRoleName()).canLogin;
     }
 
+    public Map<String, String> getCustomOptions(RoleResource role)
+    {
+        return Collections.emptyMap();
+    }
+
     public boolean isExistingRole(RoleResource role)
     {
         return getRole(role.getRoleName()) != NULL_ROLE;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a1b574e5/src/java/org/apache/cassandra/auth/IRoleManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/IRoleManager.java 
b/src/java/org/apache/cassandra/auth/IRoleManager.java
index 3295a3d..5205dad 100644
--- a/src/java/org/apache/cassandra/auth/IRoleManager.java
+++ b/src/java/org/apache/cassandra/auth/IRoleManager.java
@@ -169,6 +169,17 @@ public interface IRoleManager
     boolean canLogin(RoleResource role);
 
     /**
+     * Where an implementation supports OPTIONS in CREATE and ALTER operations
+     * this method should return the Map<String, String> representing the 
custom
+     * options associated with the role, as supplied to CREATE or ALTER.
+     * It should never return null; if the implementation does not support
+     * OPTIONS or if none were supplied then it should return an empty map.
+     * @param role Role whose custom options are required
+     * @return Key/Value pairs representing the custom options for the Role
+     */
+    Map<String, String> getCustomOptions(RoleResource role);
+
+    /**
      * Return true is a Role with the given name exists in the system.
      *
      * @param role Role whose existence to verify

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a1b574e5/src/java/org/apache/cassandra/cql3/statements/ListRolesStatement.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/cql3/statements/ListRolesStatement.java 
b/src/java/org/apache/cassandra/cql3/statements/ListRolesStatement.java
index 24071b0..477aedc 100644
--- a/src/java/org/apache/cassandra/cql3/statements/ListRolesStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/ListRolesStatement.java
@@ -28,6 +28,7 @@ import org.apache.cassandra.auth.*;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.cql3.*;
 import org.apache.cassandra.db.marshal.BooleanType;
+import org.apache.cassandra.db.marshal.MapType;
 import org.apache.cassandra.db.marshal.UTF8Type;
 import org.apache.cassandra.exceptions.*;
 import org.apache.cassandra.service.ClientState;
@@ -39,10 +40,12 @@ public class ListRolesStatement extends 
AuthorizationStatement
     private static final String KS = AuthKeyspace.NAME;
     private static final String CF = AuthKeyspace.ROLES;
 
+    private static final MapType optionsType = 
MapType.getInstance(UTF8Type.instance, UTF8Type.instance, false);
     private static final List<ColumnSpecification> metadata =
-       ImmutableList.of(new ColumnSpecification(KS, CF, new 
ColumnIdentifier("role", true), UTF8Type.instance),
-                        new ColumnSpecification(KS, CF, new 
ColumnIdentifier("super", true), BooleanType.instance),
-                        new ColumnSpecification(KS, CF, new 
ColumnIdentifier("login", true), BooleanType.instance));
+        ImmutableList.of(new ColumnSpecification(KS, CF, new 
ColumnIdentifier("role", true), UTF8Type.instance),
+                         new ColumnSpecification(KS, CF, new 
ColumnIdentifier("super", true), BooleanType.instance),
+                         new ColumnSpecification(KS, CF, new 
ColumnIdentifier("login", true), BooleanType.instance),
+                         new ColumnSpecification(KS, CF, new 
ColumnIdentifier("options", true), optionsType));
 
     private final RoleResource grantee;
     private final boolean recursive;
@@ -116,6 +119,7 @@ public class ListRolesStatement extends 
AuthorizationStatement
             
result.addColumnValue(UTF8Type.instance.decompose(role.getRoleName()));
             
result.addColumnValue(BooleanType.instance.decompose(roleManager.isSuper(role)));
             
result.addColumnValue(BooleanType.instance.decompose(roleManager.canLogin(role)));
+            
result.addColumnValue(optionsType.decompose(roleManager.getCustomOptions(role)));
         }
         return new ResultMessage.Rows(result);
     }

Reply via email to