2019-01-17 13:21:20 +01:00
|
|
|
package sonia.scm.security;
|
|
|
|
|
|
2019-01-17 14:25:49 +01:00
|
|
|
import javax.inject.Inject;
|
2019-01-17 13:21:20 +01:00
|
|
|
import java.util.Collection;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
public class PermissionAssigner {
|
|
|
|
|
|
|
|
|
|
private final SecuritySystem securitySystem;
|
|
|
|
|
|
2019-01-17 14:25:49 +01:00
|
|
|
@Inject
|
2019-01-17 13:21:20 +01:00
|
|
|
public PermissionAssigner(SecuritySystem securitySystem) {
|
|
|
|
|
this.securitySystem = securitySystem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Collection<PermissionDescriptor> getAvailablePermissions() {
|
|
|
|
|
return securitySystem.getAvailablePermissions();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Collection<PermissionDescriptor> readPermissionsForUser(String id) {
|
|
|
|
|
return securitySystem.getPermissions(p -> !p.isGroupPermission() && p.getName().equals(id)).stream().map(AssignedPermission::getPermission).collect(Collectors.toSet());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void setPermissionsForUser(String id, Collection<PermissionDescriptor> permissions) {
|
|
|
|
|
Collection<AssignedPermission> existingPermissions = securitySystem.getPermissions(p -> !p.isGroupPermission() && p.getName().equals(id));
|
|
|
|
|
List<AssignedPermission> toRemove = existingPermissions.stream()
|
|
|
|
|
.filter(p -> !permissions.contains(p.getPermission()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
toRemove.forEach(securitySystem::deletePermission);
|
|
|
|
|
|
|
|
|
|
permissions.stream()
|
|
|
|
|
.map(p -> new AssignedPermission(id, false, p))
|
|
|
|
|
.filter(p -> !existingPermissions.contains(p))
|
|
|
|
|
.forEach(securitySystem::addPermission);
|
|
|
|
|
}
|
|
|
|
|
}
|