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); }
