package be.neutrinet.ispng.security;
import be.neutrinet.ispng.vpn.Users;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
/**
* Created by wannes on 12/20/14.
*/
public class Policy {
private final static Policy INSTANCE = new Policy();
public final static Policy get() {
return INSTANCE;
}
public static <T extends OwnedEntity> List<T> filterAccessible(UUID user, List<T> entities) {
if (entities == null) return new ArrayList<>();
return entities.parallelStream().filter(e -> INSTANCE.canAccess(user, e)).collect(Collectors.toList());
}
public static <T extends OwnedEntity> List<T> filterModifiable(UUID user, List<T> entities) {
if (entities == null) return new ArrayList<>();
return entities.parallelStream().filter(e -> INSTANCE.canModify(user, e)).collect(Collectors.toList());
}
public boolean canAccess(UUID user, OwnedEntity entity) {
return !(entity == null || user == null) && (Users.isAdmin(user) || entity.isOwnedBy(user));
}
public boolean canModify(UUID user, OwnedEntity entity) {
return !(entity == null || user == null) && (Users.isAdmin(user) || entity.isOwnedBy(user));
}
}