Как назначить составные роли в KeyCloak

#java #spring-boot #keycloak #keycloak-services

Вопрос:

Я использую keycloak-admin-клиент 13.0.0 в своем приложении для весенней загрузки. Я могу получить все роли от KeyCloak. Мне нужна одна роль в качестве составных ролей и назначенные роли в этой роли.

Я использовал следующий код для назначения составного. Но он назначает все роли как составные. Я хочу назначить определенную роль в качестве составной

 public List<RoleRepresentation> addComposites(String roleName) {
    // list of roles
    List<RoleRepresentation> roleRepresentations = listRoles();
    RoleResource roleResource = rolesResource.get(roleName);
    roleResource.addComposites(roleRepresentations);

    return roleRepresentations;
}
 

роли

Ответ №1:

Но он назначает все роли как составные. Я хочу назначить определенную роль в качестве составной

Это потому, что вы добавили полный список :

 List<RoleRepresentation> roleRepresentations = listRoles();
...
roleResource.addComposites(roleRepresentations);
 

Вам нужно отфильтровать из этого списка роль, которую вы хотите добавить в качестве составной, следующим образом:

 Optional<RoleRepresentation> compositive = 
          roleRepresentations.stream()
                             .filter(r -> r.getName().equals(nameOfRoleToBeAddedAsCompositive))
                             .findFirst();

if(compositive.isPresent())
   roleResource.addComposites(List.of(compositive.get()));
 

Или чище:

 roleRepresentations.stream()
                   .filter(r -> r.getName().equals(nameOfRoleToBeAddedAsCompositive))                                              
                   .findFirst()
                   .ifPresent(role -> roleResource.addComposites(List.of(role)))