User Roles and Permissions
public List<Long> assignUserRole(User user, List<RoleRequestDto> rolesMap){
List<Long> userRoleCategoryIds = new ArrayList<>();
List<Role> dbRoles = roleManager.findByNames(rolesMap.stream().map(RoleRequestDto::getRoleName).distinct().toList());
List<String> roles = new ArrayList<>();
List<UserRoleCategory> userRoleCategories = userRoleCategoryManager.findByUserId(user.getId());
rolesMap.forEach(c-> {
roles.add(String.format("%s_%s_%s",c.getCategoryName(),c.getRoleName(),c.getRoleCategoryType()));
Long roleId = dbRoles.stream().filter(role ->Objects.equals(role.getName(),c.getRoleName())).map(Role::getId).findFirst().get();
Status status = statusManager.findByName("Active");
Optional<UserRoleCategory> matchingUserRoleCategory= userRoleCategories.stream().filter(uc->uc.getCategory().equals(c.getCategoryName()) && uc.getUser().getId().equals(user.getId()) && uc.getRole().getId().equals(roleId)).findFirst();
if(!matchingUserRoleCategory.isPresent()) {
UserRoleCategory userRoleCategory = userRoleCategoryManager.create(new UserRoleCategory(c.getCategoryName(), new User(user.getId()), new Role(roleId), c.getRoleCategoryType(), status));
userRoleCategoryIds.add(userRoleCategory.getId());
}
else {
userRoleCategoryIds.add(matchingUserRoleCategory.get().getId());
}
});
log.info(roles.toString());
UserResource userResource = getUserResourceByUserName(user.getUserName());
List<RoleRepresentation> rolesToAdd = new LinkedList<>();
roles.forEach(c -> {
try {
RoleRepresentation roleRepresentation = getKeycloakRealmResource().roles().get(c).toRepresentation();
if (roleRepresentation != null) {
rolesToAdd.add(roleRepresentation);
} else {
log.error("Role {} not found in Keycloak for user {}", c, user.getUserName());
}
} catch (NotFoundException e) {
log.error("Role {} not found in Keycloak for user {}", c, user.getUserName());
}
});
userResource.roles().realmLevel().add(rolesToAdd);
return userRoleCategoryIds;
}Last updated