mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-10 07:25:44 +01:00
Accept already assigned permissions even when they are not available
This commit is contained in:
@@ -68,15 +68,15 @@ public class PermissionAssigner {
|
|||||||
Collection<PermissionDescriptor> availablePermissions = this.getAvailablePermissions();
|
Collection<PermissionDescriptor> availablePermissions = this.getAvailablePermissions();
|
||||||
|
|
||||||
permissions.stream()
|
permissions.stream()
|
||||||
.filter(permissionExists(availablePermissions))
|
.filter(permissionExists(availablePermissions, existingPermissions))
|
||||||
.map(p -> new AssignedPermission(id, groupPermission, p))
|
.map(p -> new AssignedPermission(id, groupPermission, p))
|
||||||
.filter(p -> !existingPermissions.contains(p))
|
.filter(p -> !existingPermissions.contains(p))
|
||||||
.forEach(securitySystem::addPermission);
|
.forEach(securitySystem::addPermission);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Predicate<PermissionDescriptor> permissionExists(Collection<PermissionDescriptor> availablePermissions) {
|
private Predicate<PermissionDescriptor> permissionExists(Collection<PermissionDescriptor> availablePermissions, Collection<AssignedPermission> existingPermissions) {
|
||||||
return p -> {
|
return p -> {
|
||||||
if (!availablePermissions.contains(p)) {
|
if (!availablePermissions.contains(p) && existingPermissions.stream().map(AssignedPermission::getPermission).noneMatch(e -> e.equals(p))) {
|
||||||
throw NotFoundException.notFound(ContextEntry.ContextBuilder.entity("permission", p.getValue()));
|
throw NotFoundException.notFound(ContextEntry.ContextBuilder.entity("permission", p.getValue()));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -100,6 +100,13 @@ public class PermissionAssignerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void shouldFailForNotExistingPermissions() {
|
public void shouldFailForNotExistingPermissions() {
|
||||||
expectedException.expect(NotFoundException.class);
|
expectedException.expect(NotFoundException.class);
|
||||||
permissionAssigner.setPermissionsForUser("2", asList(new PermissionDescriptor("perm:read:5"), new PermissionDescriptor("perm:read:4")));
|
permissionAssigner.setPermissionsForUser("2", asList(new PermissionDescriptor("perm:read:4"), new PermissionDescriptor("perm:read:5")));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldAcceptNotExistingPermissionsWhenTheyWereAssignedBefore() {
|
||||||
|
securitySystem.addPermission(new AssignedPermission("2", "perm:read:5"));
|
||||||
|
|
||||||
|
permissionAssigner.setPermissionsForUser("2", asList(new PermissionDescriptor("perm:read:5")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user