bug5670: Implemented full permission sync for PredefinedRoles and

RolePrototypes
This commit is contained in:
Dennis Aulenbacher
2022-05-18 12:04:18 +02:00
parent fea73c56df
commit 5413c4eae8
2 changed files with 19 additions and 10 deletions
@@ -303,24 +303,33 @@ public class UserStoreImpl implements UserStore {
getOrCreateRoleDefinitionByPrototype(AdminRole.getInstance());
getOrCreateRoleDefinitionByPrototype(UserRole.getInstance());
for (final PredefinedRoles otherPredefinedRole : PredefinedRoles.values()) {
if (getRoleDefinition(otherPredefinedRole.getId()) == null) {
final UUID id = otherPredefinedRole.getId();
final RoleDefinition potentiallyExistingRoleDefinition = getRoleDefinition(id);
final Set<WildcardPermission> targetPermissions = new HashSet<>();
for (final String stringPermission : otherPredefinedRole.getPermissions()) {
targetPermissions.add(new WildcardPermission(stringPermission));
}
if (potentiallyExistingRoleDefinition == null) {
logger.info("Predefined role definition " + otherPredefinedRole + " not found; creating");
final Set<WildcardPermission> permissions = new HashSet<>();
for (final String stringPermission : otherPredefinedRole.getPermissions()) {
permissions.add(new WildcardPermission(stringPermission));
}
createRoleDefinition(otherPredefinedRole.getId(), otherPredefinedRole.name(), permissions);
createRoleDefinition(id, otherPredefinedRole.name(), targetPermissions);
} else if (!targetPermissions.equals(potentiallyExistingRoleDefinition.getPermissions())) {
setRoleDefinitionPermissions(id, targetPermissions);
}
}
}
private RoleDefinition getOrCreateRoleDefinitionByPrototype(RolePrototype rolePrototype) {
RoleDefinition roleDefinition = getRoleDefinition(rolePrototype.getId());
final UUID id = rolePrototype.getId();
RoleDefinition roleDefinition = getRoleDefinition(id);
if (roleDefinition == null) {
logger.info("No " + rolePrototype.getName() + " role found. Creating default role \""
+ rolePrototype.getName() + "\" with permission \"" + rolePrototype.getPermissions() + "\"");
roleDefinition = createRoleDefinition(rolePrototype.getId(), rolePrototype.getName(),
roleDefinition = createRoleDefinition(id, rolePrototype.getName(),
rolePrototype.getPermissions());
}else if(roleDefinition.getPermissions() != null
&& !roleDefinition.getPermissions().equals(rolePrototype.getPermissions())){
setRoleDefinitionPermissions(id, rolePrototype.getPermissions());
roleDefinition = getRoleDefinition(id);
}
return roleDefinition;
}