【问题标题】:Add role to user using Keycloak Admin Java API使用 Keycloak Admin Java API 向用户添加角色
【发布时间】:2021-12-15 16:37:33
【问题描述】:

目标是从我的 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);

    }

我不明白为什么更新角色这么复杂(很多列表):(

我认为我没有走好路..

【问题讨论】:

    标签: java spring-boot keycloak keycloak-rest-api keycloak-admin-cli


    【解决方案1】:

    在这里找到答案:Comparing two lists and getting differences

    CollectionUtils.removeAll(rolesOfUserActual, rolesOfUserActualNew); // roles added
    CollectionUtils.removeAll(rolesOfUserActualNew, rolesOfUserActual); //roles deleted
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 2021-12-12
      • 2020-01-20
      • 1970-01-01
      • 2018-07-05
      • 2021-05-24
      • 2019-12-07
      相关资源
      最近更新 更多