killbill-memoizeit

util: CR for f83ba3fc6. Allow an empty set of permission when

11/1/2017 8:41:38 PM

Details

diff --git a/util/src/main/java/org/killbill/billing/util/security/shiro/dao/DefaultUserDao.java b/util/src/main/java/org/killbill/billing/util/security/shiro/dao/DefaultUserDao.java
index 1d9757d..8f02fe2 100644
--- a/util/src/main/java/org/killbill/billing/util/security/shiro/dao/DefaultUserDao.java
+++ b/util/src/main/java/org/killbill/billing/util/security/shiro/dao/DefaultUserDao.java
@@ -123,11 +123,10 @@ public class DefaultUserDao implements UserDao {
             public Void inTransaction(final Handle handle, final TransactionStatus status) throws Exception {
                 final RolesPermissionsSqlDao rolesPermissionsSqlDao = handle.attach(RolesPermissionsSqlDao.class);
                 final List<RolesPermissionsModelDao> existingPermissions = rolesPermissionsSqlDao.getByRoleName(role);
-                if (existingPermissions.isEmpty()) {
-                    throw new SecurityApiException(ErrorCode.SECURITY_INVALID_ROLE, role);
-                }
-
-                final Iterable<RolesPermissionsModelDao> toBeDeleted = Iterables.filter(existingPermissions, new Predicate<RolesPermissionsModelDao>() {
+                // A empty list of permissions means we should remove all current permissions
+                final Iterable<RolesPermissionsModelDao> toBeDeleted = existingPermissions.isEmpty() ?
+                                                                       existingPermissions :
+                                                                       Iterables.filter(existingPermissions, new Predicate<RolesPermissionsModelDao>() {
                     @Override
                     public boolean apply(final RolesPermissionsModelDao input) {
                         return !permissions.contains(input.getPermission());
diff --git a/util/src/test/java/org/killbill/billing/util/security/shiro/realm/TestKillBillJdbcRealm.java b/util/src/test/java/org/killbill/billing/util/security/shiro/realm/TestKillBillJdbcRealm.java
index 5e89611..ea70d42 100644
--- a/util/src/test/java/org/killbill/billing/util/security/shiro/realm/TestKillBillJdbcRealm.java
+++ b/util/src/test/java/org/killbill/billing/util/security/shiro/realm/TestKillBillJdbcRealm.java
@@ -40,6 +40,7 @@ import org.testng.annotations.Test;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 
 public class TestKillBillJdbcRealm extends UtilTestSuiteWithEmbeddedDB {
@@ -206,6 +207,8 @@ public class TestKillBillJdbcRealm extends UtilTestSuiteWithEmbeddedDB {
         Assert.assertTrue(updatedRoleDefinition.contains("tag:create_tag_definition"));
         Assert.assertTrue(updatedRoleDefinition.contains("entitlement:create"));
 
+        securityApi.updateRoleDefinition("original", ImmutableList.<String>of(), callContext);
+        Assert.assertEquals(securityApi.getRoleDefinition("original", callContext).size(), 0);
     }
 
     private void testInvalidPermissionScenario(final List<String> permissions) {