keycloak-uncached

Merge pull request #2708 from stianst/KEYCLOAK-2866-1.9 KEYCLOAK-2866

4/21/2016 9:58:13 AM

Details

diff --git a/services/src/main/java/org/keycloak/services/resources/admin/RoleMapperResource.java b/services/src/main/java/org/keycloak/services/resources/admin/RoleMapperResource.java
index 5bd67d1..f6df8aa 100644
--- a/services/src/main/java/org/keycloak/services/resources/admin/RoleMapperResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/admin/RoleMapperResource.java
@@ -105,7 +105,7 @@ public class RoleMapperResource {
         auth.requireView();
 
         MappingsRepresentation all = new MappingsRepresentation();
-        Set<RoleModel> realmMappings = roleMapper.getRoleMappings();
+        Set<RoleModel> realmMappings = roleMapper.getRealmRoleMappings();
         RealmManager manager = new RealmManager(session);
         if (realmMappings.size() > 0) {
             List<RoleRepresentation> realmRep = new ArrayList<RoleRepresentation>();
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupTest.java
index dd7c433..fc9aba7 100755
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupTest.java
@@ -20,14 +20,18 @@ package org.keycloak.testsuite.admin.group;
 import org.junit.Assert;
 import org.junit.Test;
 import org.keycloak.admin.client.resource.RealmResource;
+import org.keycloak.admin.client.resource.RoleMappingResource;
 import org.keycloak.representations.AccessToken;
 import org.keycloak.representations.idm.ClientRepresentation;
 import org.keycloak.representations.idm.CredentialRepresentation;
 import org.keycloak.representations.idm.GroupRepresentation;
+import org.keycloak.representations.idm.MappingsRepresentation;
 import org.keycloak.representations.idm.RealmRepresentation;
 import org.keycloak.representations.idm.RoleRepresentation;
 import org.keycloak.representations.idm.UserRepresentation;
 import org.keycloak.testsuite.admin.ApiUtil;
+import org.keycloak.testsuite.util.ClientBuilder;
+import org.keycloak.testsuite.util.RoleBuilder;
 import org.keycloak.testsuite.util.URLAssert;
 import org.keycloak.testsuite.util.UserBuilder;
 import org.keycloak.util.JsonSerialization;
@@ -44,6 +48,7 @@ import java.util.Map;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
+import static org.keycloak.testsuite.Assert.assertNames;
 
 /**
  * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
@@ -308,17 +313,17 @@ public class GroupTest extends AbstractGroupTest {
         realm.users().get(userAId).joinGroup(groupId);
 
         List<UserRepresentation> members = realm.groups().group(groupId).members(0, 10);
-        org.keycloak.testsuite.Assert.assertNames(members, "user-a");
+        assertNames(members, "user-a");
 
         realm.users().get(userBId).joinGroup(groupId);
 
         members = realm.groups().group(groupId).members(0, 10);
-        org.keycloak.testsuite.Assert.assertNames(members, "user-a", "user-b");
+        assertNames(members, "user-a", "user-b");
 
         realm.users().get(userAId).leaveGroup(groupId);
 
         members = realm.groups().group(groupId).members(0, 10);
-        org.keycloak.testsuite.Assert.assertNames(members, "user-b");
+        assertNames(members, "user-b");
     }
 
     @Test
@@ -338,4 +343,67 @@ public class GroupTest extends AbstractGroupTest {
 
         adminClient.realm(rep.getRealm()).remove();
     }
+
+    @Test
+    public void roleMappings() {
+        RealmResource realm = adminClient.realms().realm("test");
+        realm.roles().create(RoleBuilder.create().name("realm-role").build());
+        realm.roles().create(RoleBuilder.create().name("realm-composite").build());
+        realm.roles().create(RoleBuilder.create().name("realm-child").build());
+        realm.roles().get("realm-composite").addComposites(Collections.singletonList(realm.roles().get("realm-child").toRepresentation()));
+
+        Response response = realm.clients().create(ClientBuilder.create().clientId("myclient").build());
+        String clientId = ApiUtil.getCreatedId(response);
+        response.close();
+
+        realm.clients().get(clientId).roles().create(RoleBuilder.create().name("client-role").build());
+        realm.clients().get(clientId).roles().create(RoleBuilder.create().name("client-role2").build());
+        realm.clients().get(clientId).roles().create(RoleBuilder.create().name("client-composite").build());
+        realm.clients().get(clientId).roles().create(RoleBuilder.create().name("client-child").build());
+        realm.clients().get(clientId).roles().get("client-composite").addComposites(Collections.singletonList(realm.clients().get(clientId).roles().get("client-child").toRepresentation()));
+
+        GroupRepresentation group = new GroupRepresentation();
+        group.setName("group");
+        response = realm.groups().add(group);
+        String groupId = ApiUtil.getCreatedId(response);
+        response.close();
+
+        RoleMappingResource roles = realm.groups().group(groupId).roles();
+        assertEquals(0, roles.realmLevel().listAll().size());
+
+        // Add realm roles
+        List<RoleRepresentation> l = new LinkedList<>();
+        l.add(realm.roles().get("realm-role").toRepresentation());
+        l.add(realm.roles().get("realm-composite").toRepresentation());
+        roles.realmLevel().add(l);
+
+        // Add client roles
+        roles.clientLevel(clientId).add(Collections.singletonList(realm.clients().get(clientId).roles().get("client-role").toRepresentation()));
+        roles.clientLevel(clientId).add(Collections.singletonList(realm.clients().get(clientId).roles().get("client-composite").toRepresentation()));
+
+        // List realm roles
+        assertNames(roles.realmLevel().listAll(), "realm-role", "realm-composite");
+        assertNames(roles.realmLevel().listAvailable(), "admin", "offline_access", "user");
+        assertNames(roles.realmLevel().listEffective(), "realm-role", "realm-composite", "realm-child");
+
+        // List client roles
+        assertNames(roles.clientLevel(clientId).listAll(), "client-role", "client-composite");
+        assertNames(roles.clientLevel(clientId).listAvailable(), "client-role2");
+        assertNames(roles.clientLevel(clientId).listEffective(), "client-role", "client-composite", "client-child");
+
+        // Get mapping representation
+        MappingsRepresentation all = roles.getAll();
+        assertNames(all.getRealmMappings(), "realm-role", "realm-composite");
+        assertEquals(1, all.getClientMappings().size());
+        assertNames(all.getClientMappings().get("myclient").getMappings(), "client-role", "client-composite");
+
+        // Remove realm role
+        roles.realmLevel().remove(Collections.singletonList(realm.roles().get("realm-role").toRepresentation()));
+        assertNames(roles.realmLevel().listAll(), "realm-composite");
+
+        // Remove client role
+        roles.clientLevel(clientId).remove(Collections.singletonList(realm.clients().get(clientId).roles().get("client-role").toRepresentation()));
+        assertNames(roles.clientLevel(clientId).listAll(), "client-composite");
+    }
+
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java
index 24164d7..e5968c1 100755
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java
@@ -24,22 +24,30 @@ import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.keycloak.admin.client.resource.IdentityProviderResource;
+import org.keycloak.admin.client.resource.RealmResource;
+import org.keycloak.admin.client.resource.RoleMappingResource;
 import org.keycloak.admin.client.resource.UserResource;
 import org.keycloak.models.UserModel;
 import org.keycloak.representations.idm.CredentialRepresentation;
 import org.keycloak.representations.idm.ErrorRepresentation;
 import org.keycloak.representations.idm.FederatedIdentityRepresentation;
+import org.keycloak.representations.idm.GroupRepresentation;
 import org.keycloak.representations.idm.IdentityProviderRepresentation;
+import org.keycloak.representations.idm.MappingsRepresentation;
 import org.keycloak.representations.idm.RealmRepresentation;
 import org.keycloak.representations.idm.RequiredActionProviderRepresentation;
+import org.keycloak.representations.idm.RoleRepresentation;
 import org.keycloak.representations.idm.UserRepresentation;
 import org.keycloak.services.resources.RealmsResource;
 import org.keycloak.testsuite.page.LoginPasswordUpdatePage;
 import org.keycloak.testsuite.pages.InfoPage;
 import org.keycloak.testsuite.pages.LoginPage;
+import org.keycloak.testsuite.util.ClientBuilder;
 import org.keycloak.testsuite.util.GreenMailRule;
 import org.keycloak.testsuite.util.MailUtils;
 import org.keycloak.testsuite.util.OAuthClient;
+import org.keycloak.testsuite.util.RoleBuilder;
+import org.keycloak.testsuite.util.UserBuilder;
 import org.openqa.selenium.WebDriver;
 
 import javax.mail.MessagingException;
@@ -55,6 +63,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 import static org.junit.Assert.*;
+import static org.keycloak.testsuite.Assert.assertNames;
 
 /**
  * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
@@ -713,6 +722,66 @@ public class UserTest extends AbstractAdminTest {
         realm.flows().updateRequiredAction(UserModel.RequiredAction.UPDATE_PASSWORD.toString(), updatePasswordReqAction);
     }
 
+    @Test
+    public void roleMappings() {
+        RealmResource realm = adminClient.realms().realm("test");
+        realm.roles().create(RoleBuilder.create().name("realm-role").build());
+        realm.roles().create(RoleBuilder.create().name("realm-composite").build());
+        realm.roles().create(RoleBuilder.create().name("realm-child").build());
+        realm.roles().get("realm-composite").addComposites(Collections.singletonList(realm.roles().get("realm-child").toRepresentation()));
+
+        Response response = realm.clients().create(ClientBuilder.create().clientId("myclient").build());
+        String clientId = ApiUtil.getCreatedId(response);
+        response.close();
+
+        realm.clients().get(clientId).roles().create(RoleBuilder.create().name("client-role").build());
+        realm.clients().get(clientId).roles().create(RoleBuilder.create().name("client-role2").build());
+        realm.clients().get(clientId).roles().create(RoleBuilder.create().name("client-composite").build());
+        realm.clients().get(clientId).roles().create(RoleBuilder.create().name("client-child").build());
+        realm.clients().get(clientId).roles().get("client-composite").addComposites(Collections.singletonList(realm.clients().get(clientId).roles().get("client-child").toRepresentation()));
+
+        response = realm.users().create(UserBuilder.create().username("myuser").build());
+        String userId = ApiUtil.getCreatedId(response);
+        response.close();
+
+        RoleMappingResource roles = realm.users().get(userId).roles();
+        assertNames(roles.realmLevel().listAll(), "user", "offline_access");
+
+        // Add realm roles
+        List<RoleRepresentation> l = new LinkedList<>();
+        l.add(realm.roles().get("realm-role").toRepresentation());
+        l.add(realm.roles().get("realm-composite").toRepresentation());
+        roles.realmLevel().add(l);
+
+        // Add client roles
+        roles.clientLevel(clientId).add(Collections.singletonList(realm.clients().get(clientId).roles().get("client-role").toRepresentation()));
+        roles.clientLevel(clientId).add(Collections.singletonList(realm.clients().get(clientId).roles().get("client-composite").toRepresentation()));
+
+        // List realm roles
+        assertNames(roles.realmLevel().listAll(), "realm-role", "realm-composite", "user", "offline_access");
+        assertNames(roles.realmLevel().listAvailable(), "admin");
+        assertNames(roles.realmLevel().listEffective(), "realm-role", "realm-composite", "realm-child", "user", "offline_access");
+
+        // List client roles
+        assertNames(roles.clientLevel(clientId).listAll(), "client-role", "client-composite");
+        assertNames(roles.clientLevel(clientId).listAvailable(), "client-role2");
+        assertNames(roles.clientLevel(clientId).listEffective(), "client-role", "client-composite", "client-child");
+
+        // Get mapping representation
+        MappingsRepresentation all = roles.getAll();
+        assertNames(all.getRealmMappings(), "realm-role", "realm-composite", "user", "offline_access");
+        assertEquals(2, all.getClientMappings().size());
+        assertNames(all.getClientMappings().get("myclient").getMappings(), "client-role", "client-composite");
+        assertNames(all.getClientMappings().get("account").getMappings(), "manage-account", "view-profile");
+
+        // Remove realm role
+        roles.realmLevel().remove(Collections.singletonList(realm.roles().get("realm-role").toRepresentation()));
+        assertNames(roles.realmLevel().listAll(), "realm-composite", "user", "offline_access");
+
+        // Remove client role
+        roles.clientLevel(clientId).remove(Collections.singletonList(realm.clients().get(clientId).roles().get("client-role").toRepresentation()));
+        assertNames(roles.clientLevel(clientId).listAll(), "client-composite");
+    }
 
     private void switchEditUsernameAllowedOn() {
         RealmRepresentation rep = realm.toRepresentation();