[英]Add role to user using Keycloak Admin Java API
目標是從我的 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);
}
我不明白為什么更新角色如此復雜(很多列表):(
我不認為我走的好路..
答案在這里找到: 比較兩個列表並獲得差異
CollectionUtils.removeAll(rolesOfUserActual, rolesOfUserActualNew); // roles added
CollectionUtils.removeAll(rolesOfUserActualNew, rolesOfUserActual); //roles deleted
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.