keycloak-uncached

Merge pull request #5194 from pedroigor/KEYCLOAK-7322 [KEYCLOAK-7322]

5/15/2018 6:05:54 AM

Details

diff --git a/core/src/main/java/org/keycloak/representations/idm/authorization/GroupPolicyRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/authorization/GroupPolicyRepresentation.java
index 4de4e97..d134aa2 100644
--- a/core/src/main/java/org/keycloak/representations/idm/authorization/GroupPolicyRepresentation.java
+++ b/core/src/main/java/org/keycloak/representations/idm/authorization/GroupPolicyRepresentation.java
@@ -17,6 +17,7 @@
 package org.keycloak.representations.idm.authorization;
 
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Set;
 
 /**
@@ -76,12 +77,12 @@ public class GroupPolicyRepresentation extends AbstractPolicyRepresentation {
 
     public void removeGroup(String... ids) {
         if (groups != null) {
-            for (final String id : ids) {
-                if (!groups.remove(id)) {
-                    for (GroupDefinition group : new HashSet<>(groups)) {
-                        if (group.getPath().startsWith(id)) {
-                            groups.remove(group);
-                        }
+            for (String id : ids) {
+                Iterator<GroupDefinition> iterator = groups.iterator();
+                while (iterator.hasNext()) {
+                    GroupDefinition group = iterator.next();
+                    if (id.equals(group.getId()) || (group.getPath() != null && group.getPath().equals(id))) {
+                        iterator.remove();
                     }
                 }
             }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/client/authorization/GroupPolicyManagementTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/client/authorization/GroupPolicyManagementTest.java
index 4decccf..ea7d840 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/client/authorization/GroupPolicyManagementTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/client/authorization/GroupPolicyManagementTest.java
@@ -151,6 +151,19 @@ public class GroupPolicyManagementTest extends AbstractPolicyManagementTest {
     }
 
     @Test
+    public void testRemoveWithoutPath() {
+        GroupPolicyRepresentation representation = new GroupPolicyRepresentation();
+
+        representation.setName("Delete Group Path Policy");
+        representation.setGroupsClaim("groups");
+        representation.addGroup("Group A");
+
+        representation.removeGroup("Group A");
+
+        assertTrue(representation.getGroups().isEmpty());
+    }
+
+    @Test
     public void testGenericConfig() {
         AuthorizationResource authorization = getClient().authorization();
         GroupPolicyRepresentation representation = new GroupPolicyRepresentation();