blob: bda82604b4213266b1f1f48745c3575a3cb0fbec [file] [log] [blame]
package de.ids_mannheim.korap.security.ac;
import de.ids_mannheim.korap.config.BeansFactory;
import de.ids_mannheim.korap.exceptions.EmptyResultException;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.NotAuthorizedException;
import de.ids_mannheim.korap.interfaces.db.PolicyHandlerIface;
import de.ids_mannheim.korap.resources.KustvaktResource;
import de.ids_mannheim.korap.resources.Permissions;
import de.ids_mannheim.korap.security.PolicyCondition;
import de.ids_mannheim.korap.user.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
/**
* @author hanl
* @date 04/03/2014
*/
public class ConditionManagement {
private static final Logger jlog = LoggerFactory
.getLogger(ConditionManagement.class);
private User user;
private PolicyHandlerIface policydao;
public ConditionManagement (User user) {
this.user = user;
this.policydao = BeansFactory.getKustvaktContext()
.getPolicyDbProvider();
}
/**
* adds a user to an existing group
*
* @param usernames
* @param condition
* @param admin
*/
// todo: conflict resolution
// fixme: not applicable to korap system roles
// only works if there is a policy with that condition and permission set, if not, create one!
public void addUser (List<String> usernames, PolicyCondition condition,
boolean admin) throws NotAuthorizedException, KustvaktException {
if (policydao.matchCondition(this.user, condition.getSpecifier(), true) == 1) {
policydao.addToCondition(usernames, condition, admin);
}
else
jlog.error("Users '{}' could not be added to condition '{}'",
usernames, condition.getSpecifier());
}
public void addUser (String username, PolicyCondition condition,
boolean admin) throws NotAuthorizedException, KustvaktException {
addUser(Arrays.asList(username), condition, admin);
}
public void removeUser (List<String> users, PolicyCondition condition)
throws KustvaktException {
if (policydao.matchCondition(this.user, condition.getSpecifier(), true) == 1) {
policydao.removeFromCondition(users, condition);
}
}
public Set<String> getMembers (PolicyCondition condition) {
try {
if (policydao.matchCondition(this.user, condition.getSpecifier(),
true) == 1) {
return new HashSet<>(policydao.getUsersFromCondition(condition));
}
}
catch (KustvaktException e) {
return Collections.emptySet();
}
return Collections.emptySet();
}
@Deprecated
public void addUser (KustvaktResource resource, String user,
Permissions.Permission ... pps) throws NotAuthorizedException,
KustvaktException, EmptyResultException {
addUser(resource, Arrays.asList(user), pps);
}
@Deprecated
public void addUser (KustvaktResource resource, List<String> users,
Permissions.Permission ... pps) throws NotAuthorizedException,
KustvaktException, EmptyResultException {
SecurityManager policies = SecurityManager.findbyId(resource.getId(),
this.user);
PolicyCondition c = policies.getExtensional(pps);
if (c != null)
this.addUser(users, c, false);
else {
PolicyCondition ex = new PolicyCondition();
new PolicyBuilder(this.user).setResources(resource)
.addCondition(ex.getSpecifier()).setPermissions(pps)
.create();
this.addUser(users, ex, false);
}
}
}