hs.hsadmin/hsarback/src/de/hsadmin/mods/db/PgSqlUserModuleImpl.java

47 lines
1.5 KiB
Java
Raw Normal View History

2011-03-22 23:02:06 +01:00
package de.hsadmin.mods.db;
import java.util.List;
2011-05-20 16:57:10 +02:00
import javax.persistence.EntityManager;
import javax.persistence.Query;
2011-03-22 23:02:06 +01:00
import de.hsadmin.core.model.AbstractEntity;
import de.hsadmin.core.model.AbstractModuleImpl;
2011-05-20 16:25:45 +02:00
import de.hsadmin.core.model.AuthorisationException;
2011-03-22 23:02:06 +01:00
import de.hsadmin.core.model.HSAdminException;
2011-05-20 16:57:10 +02:00
import de.hsadmin.mods.pac.Pac;
import de.hsadmin.mods.user.UnixUser;
2011-03-22 23:02:06 +01:00
public class PgSqlUserModuleImpl extends AbstractModuleImpl {
2011-05-20 16:25:45 +02:00
@Override
public AbstractEntity add(AbstractEntity newEntity) throws HSAdminException {
UnixUser loginUser = getTransaction().getLoginUser();
2011-05-20 16:25:45 +02:00
PgSqlUser user = (PgSqlUser) newEntity;
String name = user.getName();
2011-05-20 16:57:10 +02:00
if (name.length() < 7 || name.charAt(5) != '_') {
throw new AuthorisationException(loginUser, "add", newEntity);
2011-05-20 16:25:45 +02:00
}
2011-05-20 16:57:10 +02:00
EntityManager em = getTransaction().getEntityManager();
Query qPac = em.createQuery("SELECT obj FROM Pacs obj WHERE obj.name = :pacName");
qPac.setParameter("pacName", name.substring(0, 5));
Object singleResult = qPac.getSingleResult();
Pac pac = (Pac) singleResult;
if (pac == null || !pac.isReadAllowedFor(loginUser)) {
throw new AuthorisationException(loginUser, "add", newEntity);
2011-05-20 16:25:45 +02:00
}
user.setPac(pac);
2011-05-20 16:25:45 +02:00
return super.add(newEntity);
}
2011-03-22 23:02:06 +01:00
@Override
public List<AbstractEntity> search(Class<? extends AbstractEntity> entityClass,
String condition, String orderBy) throws HSAdminException {
if (orderBy == null || orderBy.length() == 0) {
2011-04-01 18:53:37 +02:00
orderBy = "ORDER BY obj.name ASC";
2011-03-22 23:02:06 +01:00
}
return super.search(entityClass, condition, orderBy);
}
}