2017-10-18 98 views
3

当前我尝试使用Keycloak API和Java客户端。目前我努力以编程方式将角色分配给组。不幸的是,在这一点上,文档并不是非常复杂。以编程方式将角色分配给使用Keycloak API的组

这里我举的例子代码:如果它们不存在,但需要给予什么的分配

group.setRealmRoles(Arrays.asList(editRole.getName(), deleteRole.getName())); 

@Test 
public void testPushGroupWithRealmRoles() throws IOException { 

    GroupRepresentation group = new GroupRepresentation(); 
    group.setName("JUnit Test Group realm roles"); 

    String editRoleName = "junit_edit"; 
    String deleteRoleName = "junit_delete"; 

    RoleRepresentation editRole = getRealmRole(editRoleName); 
    if (editRole == null) { 
     editRole = new RoleRepresentation(editRoleName, "is allowed to edit", false); 
     getKeycloak().realm(clientConfig.getRealm()).roles().create(editRole); 
    } 

    RoleRepresentation deleteRole = getRealmRole(deleteRoleName); 
    if (deleteRole == null) { 
     deleteRole = new RoleRepresentation(deleteRoleName, "is allowed to delete", false); 
     getKeycloak().realm(clientConfig.getRealm()).roles().create(deleteRole); 
    } 

    group.setRealmRoles(Arrays.asList(editRole.getName(), deleteRole.getName())); 

    GroupResource existingGroup = getGroupRepresentation(group.getName()); 

    if(existingGroup != null){ 
     existingGroup.update(group); 
    } else{ 
     getKeycloak().realm(clientConfig.getRealm()).groups().add(group); 
    } 
} 

集团创建如果不存在,将创建角色字符串列表中的参数?角色的名字?角色的技术ID? (两者都不适合我)。

任何帮助表示赞赏!

UPDATE 感谢ravthiru我能解决我的问题。工作代码是这样的:

@Test 
public void testPushGroupWithRealmRoles() throws IOException { 

    /* 
    ensure the roles exist 
    */ 
    String editRoleName = "junit_edit"; 
    String deleteRoleName = "junit_delete"; 

    RoleRepresentation editRole = getRealmRole(editRoleName); 
    if (editRole == null) { 
     editRole = new RoleRepresentation(editRoleName, "is allowed to edit", false); 
     getKeycloak().realm(clientConfig.getRealm()).roles().create(editRole); 
    } 

    RoleRepresentation deleteRole = getRealmRole(deleteRoleName); 
    if (deleteRole == null) { 
     deleteRole = new RoleRepresentation(deleteRoleName, "is allowed to delete", false); 
     getKeycloak().realm(clientConfig.getRealm()).roles().create(deleteRole); 
    } 


    /* 
    ensure the group exists 
    */ 
    GroupRepresentation group = new GroupRepresentation(); 
    group.setName("JUnit Test Group realm roles"); 

    GroupResource existingGroup = getGroupResource(group.getName()); 

    if (existingGroup != null) { 
     existingGroup.update(group); 
    } else { 
     getKeycloak().realm(clientConfig.getRealm()).groups().add(group); 
    } 


    /* 
    assign roles to group 
    */ 
    existingGroup.roles().realmLevel().add(Arrays.asList(editRole, deleteRole)); 
} 

回答

2

如果您已经创建了角色,那么您可以使用以下代码将角色与组相关联。

RoleRepresentation grouprole = realm.roles().get("grouprole").toRepresentation(); 

List<RoleRepresentation> roles = new LinkedList<>(); 
roles.add(grouprole); 
realm.groups().group(myGroup.getId()).roles().realmLevel().add(roles); 

这里“grouprole”的角色关联到“为myGroup”组

+0

非常感谢您的回答,这个工程就像一个魅力。我可以用你的方法以编程方式分配Realm和Client角色。 – flexguse

+0

有谁知道如何分配一个角色与nodejs组? – Mjafko

相关问题