簡體   English   中英

使用 Keycloak Admin Java API 向用戶添加角色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM