使用 Keycloak API 以编程方式将角色分配给组
Assign Roles programmatically to Groups with Keycloak API
目前我尝试使用 Keycloak API 和 Java 客户端。目前,我很难以编程方式将角色分配给组。不幸的是,此时文档还不是很详尽。
这是我的示例代码:
@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);
}
}
组不存在则创建,角色不存在则创建但分配
group.setRealmRoles(Arrays.asList(editRole.getName(), deleteRole.getName()));
需要在字符串列表中提供什么作为参数?角色的名字?角色的技术 ID? (两者都不适合我)。
感谢任何帮助!
更新
感谢 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));
}
如果您已经创建了角色,那么您可以使用以下代码将角色与组相关联。
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" 组
目前我尝试使用 Keycloak API 和 Java 客户端。目前,我很难以编程方式将角色分配给组。不幸的是,此时文档还不是很详尽。
这是我的示例代码:
@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);
}
}
组不存在则创建,角色不存在则创建但分配
group.setRealmRoles(Arrays.asList(editRole.getName(), deleteRole.getName()));
需要在字符串列表中提供什么作为参数?角色的名字?角色的技术 ID? (两者都不适合我)。
感谢任何帮助!
更新 感谢 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));
}
如果您已经创建了角色,那么您可以使用以下代码将角色与组相关联。
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" 组