package fi.otavanopisto.muikku.dao.security;
import java.util.List;
import fi.otavanopisto.muikku.model.security.ResourceRolePermission_;
import fi.otavanopisto.muikku.dao.CoreDAO;
import fi.otavanopisto.muikku.model.security.Permission;
import fi.otavanopisto.muikku.model.security.ResourceRights;
import fi.otavanopisto.muikku.model.security.ResourceRolePermission;
import fi.otavanopisto.muikku.model.users.RoleEntity;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
public class ResourceRolePermissionDAO extends CoreDAO<ResourceRolePermission> {
private static final long serialVersionUID = 4464296827090661759L;
public ResourceRolePermission create(ResourceRights resourceRights, RoleEntity role, Permission permission) {
ResourceRolePermission rurpermission = new ResourceRolePermission();
rurpermission.setResourcePermission(resourceRights);
rurpermission.setRole(role);
rurpermission.setPermission(permission);
getEntityManager().persist(rurpermission);
return rurpermission;
}
// TODO: Not a DAO method
public boolean hasResourcePermissionAccess(ResourceRights resourceRights, RoleEntity role, Permission permission) {
return findByUserRoleAndPermission(resourceRights, role, permission) != null;
}
public ResourceRolePermission findByUserRoleAndPermission(ResourceRights resourceRights, RoleEntity role, Permission permission) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<ResourceRolePermission> criteria = criteriaBuilder.createQuery(ResourceRolePermission.class);
Root<ResourceRolePermission> root = criteria.from(ResourceRolePermission.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(ResourceRolePermission_.resourcePermission), resourceRights),
criteriaBuilder.equal(root.get(ResourceRolePermission_.role), role),
criteriaBuilder.equal(root.get(ResourceRolePermission_.permission), permission)
)
);
return getSingleResult(entityManager.createQuery(criteria));
}
public List<ResourceRolePermission> listByResourceRights(ResourceRights resourceRights) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<ResourceRolePermission> criteria = criteriaBuilder.createQuery(ResourceRolePermission.class);
Root<ResourceRolePermission> root = criteria.from(ResourceRolePermission.class);
criteria.select(root);
criteria.where(
criteriaBuilder.equal(root.get(ResourceRolePermission_.resourcePermission), resourceRights)
);
return entityManager.createQuery(criteria).getResultList();
}
@Override
public void delete(ResourceRolePermission userRolePermission) {
super.delete(userRolePermission);
}
}