Accept already assigned permissions even when they are not available

This commit is contained in:
René Pfeuffer
2019-01-21 10:01:29 +01:00
parent 760a37409b
commit cda8c59c2d
2 changed files with 11 additions and 4 deletions

View File

@@ -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;

View File

@@ -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")));
} }
} }