目标是从我的 Angular 前端管理用户的角色。前面将向我发送为用户提供的更新角色。
实际上用户有["ROLE_A"]
管理员更新用户的角色。
现在前面向我发送:["ROLE_A","ROLE_B","ROLE_C"]
给定用户。
我的目标是能够更新该用户的角色。
可以有比以前更多或更少的权利。(“差异列表”“正在工作”..(404 错误)仅当有比以前新的角色时.. 但不是当我删除一些角色时..)
public void updateUserRoles() {
keycloak = keycloakService.getInstance();
List<RoleRepresentation> rolesOfUserActual = keycloak.realm("api").users().get("95315cf6-b10f-4b6c-a8ac-f60ca4820307").roles().realmLevel().listAll();
List<RoleRepresentation> rolesOfUserActualNew = keycloak.realm("api").users().get("95315cf6-b10f-4b6c-a8ac-f60ca4820307").roles().realmLevel().listAll();
RoleRepresentation newrole = new RoleRepresentation("ROLE_READ_GROUPS", null, false); // this role already exists in keycloak.
rolesOfUserActualNew.add(newrole);
List<RoleRepresentation> differences = rolesOfUserActual.stream()
.filter(name -> !rolesOfUserActualNew.contains(name))
.collect(Collectors.toList());
List<RoleRepresentation> roleToAdd = new ArrayList();
List<RoleRepresentation> roleToDelete = new ArrayList();
differences.forEach((role) -> {
if(rolesOfUserActual.contains(role)) {
roleToDelete.add(role);
}else {
roleToAdd.add(role);
}
});
keycloak.realm("api").users().get("95315cf6-b10f-4b6c-a8ac-f60ca4820307").roles().realmLevel().add(roleToAdd);
keycloak.realm("api").users().get("95315cf6-b10f-4b6c-a8ac-f60ca4820307").roles().realmLevel().remove(roleToDelete);
}
我不明白为什么更新角色如此复杂(很多列表):(
我不认为我走的好路..