Commit 85d983f0 by Tuomas Riihimäki

Changed to new Permission stuff. Lot is still missing, but getting there...

1 parent f378d8a0
Showing with 693 additions and 757 deletions
...@@ -9,7 +9,7 @@ import javax.persistence.criteria.Predicate; ...@@ -9,7 +9,7 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class AndPredicateCreator<A, T extends ModelInterface<?>> implements FacadeCallback<T> { public class AndPredicateCreator<A, T extends ModelInterface<?>> implements FacadeCallback<T> {
private final A searchval; private final A searchval;
......
...@@ -7,7 +7,7 @@ import javax.persistence.criteria.CriteriaQuery; ...@@ -7,7 +7,7 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import fi.insomnia.bortal.utilities.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public interface FacadeCallback<C extends ModelInterface<?>> { public interface FacadeCallback<C extends ModelInterface<?>> {
......
...@@ -11,7 +11,7 @@ import javax.persistence.metamodel.SingularAttribute; ...@@ -11,7 +11,7 @@ import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.utilities.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class OrPredicateCreator<A, T extends ModelInterface<?>> implements FacadeCallback<T> { public class OrPredicateCreator<A, T extends ModelInterface<?>> implements FacadeCallback<T> {
private final A searchstr; private final A searchstr;
......
...@@ -9,7 +9,7 @@ import javax.persistence.criteria.Predicate; ...@@ -9,7 +9,7 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallback<T> { public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallback<T> {
......
...@@ -9,7 +9,7 @@ import javax.persistence.criteria.Predicate; ...@@ -9,7 +9,7 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class StringSearchPredicateCreator<T extends ModelInterface<?>> implements FacadeCallback<T> { public class StringSearchPredicateCreator<T extends ModelInterface<?>> implements FacadeCallback<T> {
private static final String WILDCARD = "%"; private static final String WILDCARD = "%";
......
...@@ -20,8 +20,7 @@ import org.slf4j.LoggerFactory; ...@@ -20,8 +20,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beanutil.PdfPrinter; import fi.insomnia.bortal.beanutil.PdfPrinter;
import fi.insomnia.bortal.bortal.views.BillSummary; import fi.insomnia.bortal.bortal.views.BillSummary;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.BillFacade; import fi.insomnia.bortal.facade.BillFacade;
import fi.insomnia.bortal.facade.BillLineFacade; import fi.insomnia.bortal.facade.BillLineFacade;
import fi.insomnia.bortal.model.AccountEvent; import fi.insomnia.bortal.model.AccountEvent;
...@@ -81,7 +80,7 @@ public class BillBean implements BillBeanLocal { ...@@ -81,7 +80,7 @@ public class BillBean implements BillBeanLocal {
if (bill == null || !currentuser.equals(bill.getUser())) { if (bill == null || !currentuser.equals(bill.getUser())) {
bill = null; bill = null;
permbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ, "No right to read bill: ", bill); permbean.fatalPermission(BillPermission.READ_ALL, "No right to read bill: ", bill);
} }
return bill; return bill;
...@@ -116,9 +115,11 @@ public class BillBean implements BillBeanLocal { ...@@ -116,9 +115,11 @@ public class BillBean implements BillBeanLocal {
@Override @Override
public Bill createEmptyBill(User shoppingUser) throws PermissionDeniedException { public Bill createEmptyBill(User shoppingUser) throws PermissionDeniedException {
if (permbean.isCurrentUser(shoppingUser)) { if (permbean.isCurrentUser(shoppingUser)) {
permbean.fatalPermission(Permission.SHOP, RolePermission.EXECUTE, "No permission to create empty bill for self"); permbean.fatalPermission(BillPermission.CREATE_BILL, "No permission to create empty bill for self");
} else if (!permbean.hasPermission(Permission.ACCOUNT_MANAGEMENT, RolePermission.EXECUTE)) { } else {
permbean.fatalPermission(BillPermission.WRITE_ALL, "Trying to create bill to someone else without sufficient permission");
} }
LanEvent event = eventbean.getCurrentEvent(); LanEvent event = eventbean.getCurrentEvent();
Bill ret = new Bill(event, shoppingUser); Bill ret = new Bill(event, shoppingUser);
billFacade.create(ret); billFacade.create(ret);
...@@ -137,7 +138,7 @@ public class BillBean implements BillBeanLocal { ...@@ -137,7 +138,7 @@ public class BillBean implements BillBeanLocal {
boolean iscurrent = permissionbean.isCurrentUser(bill.getUser()); boolean iscurrent = permissionbean.isCurrentUser(bill.getUser());
Integer billnr = bill.getBillNumber(); Integer billnr = bill.getBillNumber();
if (!iscurrent || billnr != null) { if (!iscurrent || billnr != null) {
permbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.EXECUTE, "User tried to modify bill ", bill, "without sufficient permissions"); permbean.fatalPermission(BillPermission.WRITE_ALL, "User tried to modify bill ", bill, "without sufficient permissions");
} }
BillLine line = new BillLine(bill, product.getName(), product.getUnitName(), count, product.getPrice(), product.getVat()); BillLine line = new BillLine(bill, product.getName(), product.getUnitName(), count, product.getPrice(), product.getVat());
line.setLineProduct(product); line.setLineProduct(product);
......
...@@ -54,11 +54,11 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -54,11 +54,11 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
@EJB @EJB
private UserBeanLocal userbean; private UserBeanLocal userbean;
@Override // @Override
@RolesAllowed("USER_MANAGEMENT/WRITE") // @RolesAllowed("USER_MANAGEMENT/WRITE")
public List<CardTemplate> findAll() { // public List<CardTemplate> findAll() {
return cdFacade.findAll(eventBean.getCurrentEvent()); // return cdFacade.findAll(eventBean.getCurrentEvent());
} // }
@Override @Override
@RolesAllowed("USER_MANAGEMENT/WRITE") @RolesAllowed("USER_MANAGEMENT/WRITE")
...@@ -68,9 +68,8 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -68,9 +68,8 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
@Override @Override
@RolesAllowed("USER_MANAGEMENT/READ") @RolesAllowed("USER_MANAGEMENT/READ")
public CardTemplate findById(Integer id) { public CardTemplate find(Integer id) {
LanEvent ev = eventBean.getCurrentEvent(); return cdFacade.find(id);
return cdFacade.find(ev.getId(), id);
} }
@Override @Override
......
...@@ -12,11 +12,11 @@ import org.slf4j.Logger; ...@@ -12,11 +12,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.BeanRole; import fi.insomnia.bortal.enums.BeanRole;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.BortalApplication;
import fi.insomnia.bortal.enums.RolePermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.ApplicationPermission;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
/** /**
...@@ -69,41 +69,24 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote { ...@@ -69,41 +69,24 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
HashSet<String> roleset = new HashSet<String>(); HashSet<String> roleset = new HashSet<String>();
if (usr != null) { if (usr != null) {
HashSet<RoleRight> mappedRoles = new HashSet<RoleRight>();
List<Role> usrroles = userbean.localFindUsersRoles(usr);
for (Role r : usrroles) {
for (RoleRight rr : r.getRoleRights()) {
if (!mappedRoles.contains(rr)) {
mappedRoles.add(rr);
if (rr.isExecute()) {
roleset.add(rr.getPermission().getName());
roleset.add(rr.getPermission().append(RolePermission.EXECUTE));
}
if (rr.isRead()) {
roleset.add(rr.getPermission().getName());
roleset.add(rr.getPermission().append(RolePermission.READ));
}
if (rr.isWrite()) {
roleset.add(rr.getPermission().getName());
roleset.add(rr.getPermission().append(RolePermission.WRITE));
}
}
}
}
if (permbean.isLoggedIn()) { if (permbean.isLoggedIn()) {
roleset.add("USER"); roleset.add("USER");
} }
// TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!!
if (usr.isSuperadmin()) { if (usr.isSuperadmin()) {
for (Permission p : Permission.values()) { for (BortalApplication app : BortalApplication.values()) {
roleset.add(p.getName()); for (IAppPermission perm : app.getPermissions()) {
roleset.add(perm.getFullName());
roleset.add(p.append(RolePermission.EXECUTE)); }
roleset.add(p.append(RolePermission.READ));
roleset.add(p.append(RolePermission.WRITE));
} }
roleset.add(BeanRole.SUPERADMIN.name()); roleset.add(BeanRole.SUPERADMIN.name());
} else {
List<Role> usrroles = userbean.localFindUsersRoles(usr);
for (Role role : usrroles) {
for (ApplicationPermission apperm : role.getPermissions()) {
roleset.add(apperm.getPermission().getFullName());
}
}
} }
} }
......
...@@ -11,8 +11,7 @@ import javax.ejb.Stateless; ...@@ -11,8 +11,7 @@ import javax.ejb.Stateless;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
...@@ -49,10 +48,10 @@ public class PermissionBean implements PermissionBeanLocal { ...@@ -49,10 +48,10 @@ public class PermissionBean implements PermissionBeanLocal {
// } // }
@Override @Override
public boolean hasPermission(Permission target, RolePermission permission) { public boolean hasPermission(IAppPermission perm) {
return getCurrentUser().isSuperadmin() return getCurrentUser().isSuperadmin()
|| context.isCallerInRole(target.append(permission)); || context.isCallerInRole(perm.getFullName());
// User user = getCurrentUser(); // User user = getCurrentUser();
// //
...@@ -101,14 +100,12 @@ public class PermissionBean implements PermissionBeanLocal { ...@@ -101,14 +100,12 @@ public class PermissionBean implements PermissionBeanLocal {
} }
@Override @Override
public void fatalPermission(Permission target, RolePermission permission, Object... failmessage) throws PermissionDeniedException { public void fatalPermission(IAppPermission permission, Object... failmessage) throws PermissionDeniedException {
boolean ret = hasPermission(target, permission); boolean ret = hasPermission(permission);
if (!ret) { if (!ret) {
StringBuilder message = new StringBuilder("Target: ").append(target).append(" permission: ").append(permission); StringBuilder message = new StringBuilder().append(" permission: ").append(permission);
if (failmessage == null || failmessage.length == 0) { if (failmessage == null || failmessage.length == 0) {
message.append(" MSG: SessionHandler mbean permission exception: Target: ") message.append(" MSG: SessionHandler mbean permission exception: Permission: ")
.append(target)
.append(", Permission: ")
.append(permission); .append(permission);
} else { } else {
for (Object part : failmessage) { for (Object part : failmessage) {
......
...@@ -28,12 +28,11 @@ import javax.ejb.TimerService; ...@@ -28,12 +28,11 @@ import javax.ejb.TimerService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.BortalCatchableException; import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.facade.GroupMembershipFacade; import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PlaceFacade; import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.facade.PlaceGroupFacade; import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.EventMap; import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.GroupMembership; import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
...@@ -63,11 +62,6 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -63,11 +62,6 @@ public class PlaceBean implements PlaceBeanLocal {
private PlaceFacade placeFacade; private PlaceFacade placeFacade;
@EJB @EJB
private PlaceGroupFacade pgfacade;
@EJB
private UserBeanLocal userbean;
@EJB
private ProductBeanLocal productBean; private ProductBeanLocal productBean;
@EJB @EJB
...@@ -77,6 +71,8 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -77,6 +71,8 @@ public class PlaceBean implements PlaceBeanLocal {
private LoggingBeanLocal logbean; private LoggingBeanLocal logbean;
@EJB @EJB
private PermissionBeanLocal permbean; private PermissionBeanLocal permbean;
@EJB
private UserFacade userfacade;
@Override @Override
@RolesAllowed("MAP/WRITE") @RolesAllowed("MAP/WRITE")
...@@ -97,11 +93,12 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -97,11 +93,12 @@ public class PlaceBean implements PlaceBeanLocal {
*/ */
@Override @Override
public BigDecimal totalReservationPrice(User user, Place newPlace) throws PermissionDeniedException { public BigDecimal totalReservationPrice(User user, Place newPlace) throws PermissionDeniedException {
if (user == null) { if (user == null) {
user = permbean.getCurrentUser(); user = permbean.getCurrentUser();
} else if (!permbean.isCurrentUser(user) && !permbean.hasPermission(Permission.MAP, RolePermission.WRITE)) { } else if (!permbean.isCurrentUser(user) &&
throw new PermissionDeniedException(logbean, permbean.getCurrentUser(), "No right to impersonate another user"); !permbean.hasPermission(MapPermission.MANAGE_OTHERS)) {
throw new PermissionDeniedException(logbean,
permbean.getCurrentUser(), "No right to impersonate another user");
} }
Set<Place> places = new HashSet<Place>(); Set<Place> places = new HashSet<Place>();
...@@ -199,8 +196,8 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -199,8 +196,8 @@ public class PlaceBean implements PlaceBeanLocal {
public void releaseUsersPlaces(User user) throws PermissionDeniedException { public void releaseUsersPlaces(User user) throws PermissionDeniedException {
if (user == null) { if (user == null) {
user = permbean.getCurrentUser(); user = permbean.getCurrentUser();
} else if (!permbean.isCurrentUser(user) && !permbean.hasPermission(Permission.MAP, RolePermission.WRITE)) { } else if (!permbean.isCurrentUser(user)) {
throw new PermissionDeniedException(logbean, permbean.getCurrentUser(), "No right to impersonate another user"); permbean.fatalPermission(MapPermission.MANAGE_OTHERS, "Not enough rights to release users ", user, " places");
} }
logger.debug("timeouting places"); logger.debug("timeouting places");
placeFacade.releasePlaces(permbean.getCurrentUser()); placeFacade.releasePlaces(permbean.getCurrentUser());
...@@ -209,24 +206,23 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -209,24 +206,23 @@ public class PlaceBean implements PlaceBeanLocal {
@Override @Override
@RolesAllowed("MAP/EXECUTE") @RolesAllowed("MAP/EXECUTE")
public boolean buySelectedPlaces(User user) throws BortalCatchableException, PermissionDeniedException { public boolean buySelectedPlaces(User user) throws BortalCatchableException, PermissionDeniedException {
LanEvent event = eventBean.getCurrentEvent(); permbean.fatalPermission(MapPermission.BUY_PLACES, "No rights to buy places from map");
// If user is not selected or user does not have permission to modify
// the map,
// set the user as the loggedIn user
if (user == null) { if (user == null) {
user = permbean.getCurrentUser(); user = permbean.getCurrentUser();
} else if (!user.equals(permbean.getCurrentUser()) && !permbean.hasPermission(Permission.MAP, RolePermission.WRITE)) { } else if (!user.equals(permbean.getCurrentUser())) {
throw new PermissionDeniedException(logbean, permbean.getCurrentUser(), "No right to impersonate another user"); permbean.fatalPermission(MapPermission.MANAGE_OTHERS, "Can not buy places for user ", user);
user = userfacade.find(user.getId());
} }
List<Place> places = placeFacade.findUsersReservations(eventBean.getCurrentEvent(), user); LanEvent event = eventBean.getCurrentEvent();
List<Place> places = placeFacade.findUsersReservations(event, user);
if (places.size() <= 0) { if (places.size() <= 0) {
return false; return false;
} }
// PlaceGroup pg = pgbean.createPlaceGroup(user); // PlaceGroup pg = pgbean.createPlaceGroup(user);
BigDecimal totalprice = totalReservationPrice(user, null); BigDecimal totalprice = totalReservationPrice(user, null);
BigDecimal balance = permbean.getCurrentUser().getAccountBalance(); BigDecimal balance = user.getAccountBalance();
if (balance.compareTo(totalprice) < 0) { if (balance.compareTo(totalprice) < 0) {
logger.debug("User {} Could not buy things because account balance is too low!", user); logger.debug("User {} Could not buy things because account balance is too low!", user);
return false; return false;
...@@ -234,7 +230,6 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -234,7 +230,6 @@ public class PlaceBean implements PlaceBeanLocal {
PlaceGroup pg = new PlaceGroup(event, Calendar.getInstance(), Calendar.getInstance(), true); PlaceGroup pg = new PlaceGroup(event, Calendar.getInstance(), Calendar.getInstance(), true);
pg.setCreator(user); pg.setCreator(user);
// pgfacade.create(pg);
for (Place p : places) { for (Place p : places) {
if (!p.isReservedFor(user)) { if (!p.isReservedFor(user)) {
...@@ -394,7 +389,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -394,7 +389,7 @@ public class PlaceBean implements PlaceBeanLocal {
public boolean releasePlace(Place place) { public boolean releasePlace(Place place) {
place = placeFacade.find(place.getId()); place = placeFacade.find(place.getId());
User user = permbean.getCurrentUser(); User user = permbean.getCurrentUser();
if (place.getGroup() != null || place.getCurrentUser() == null || (!permbean.hasPermission(Permission.MAP, RolePermission.WRITE) && !place.getCurrentUser().equals(user))) { if (place.getGroup() != null || place.getCurrentUser() == null || (!permbean.hasPermission(MapPermission.MANAGE_OTHERS) && !place.getCurrentUser().equals(user))) {
return false; return false;
} }
place.setCurrentUser(null); place.setCurrentUser(null);
......
...@@ -20,8 +20,7 @@ import com.pdfjet.PDF; ...@@ -20,8 +20,7 @@ import com.pdfjet.PDF;
import com.pdfjet.Page; import com.pdfjet.Page;
import com.pdfjet.TextLine; import com.pdfjet.TextLine;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.GroupMembershipFacade; import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.model.GroupMembership; import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
...@@ -157,12 +156,12 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -157,12 +156,12 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
@Override @Override
public void releaseAndGenerateToken(GroupMembership gmem) throws PermissionDeniedException { public void releaseAndGenerateToken(GroupMembership gmem) throws PermissionDeniedException {
gmem = gmemfacade.find(gmem.getId());
if (!permbean.getCurrentUser().getId().equals(gmem.getPlaceGroup().getCreator().getId()) || if (!permbean.getCurrentUser().getId().equals(gmem.getPlaceGroup().getCreator().getId()) ||
!permbean.hasPermission(Permission.MAP, RolePermission.WRITE)) { !permbean.hasPermission(MapPermission.MANAGE_OTHERS)) {
throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "User tried to release and generate group membership: " + gmem); throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "User tried to release and generate group membership: " + gmem);
} }
gmem.setUser(null); gmem.setUser(null);
gmem.setInviteToken(gmemfacade.createInviteToken(eventbean.getCurrentEvent())); gmem.setInviteToken(gmemfacade.createInviteToken(eventbean.getCurrentEvent()));
gmemfacade.merge(gmem);
} }
} }
...@@ -19,12 +19,9 @@ import javax.ejb.Stateless; ...@@ -19,12 +19,9 @@ import javax.ejb.Stateless;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.facade.RoleFacade; import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.RoleRightFacade;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
/** /**
* *
...@@ -43,8 +40,6 @@ public class RoleBean implements RoleBeanLocal { ...@@ -43,8 +40,6 @@ public class RoleBean implements RoleBeanLocal {
private EventBeanLocal eventBean; private EventBeanLocal eventBean;
@EJB @EJB
private RoleFacade roleFacade; private RoleFacade roleFacade;
@EJB
private RoleRightFacade rrfacade;
@Override @Override
@RolesAllowed("ROLE_MANAGEMENT/READ") @RolesAllowed("ROLE_MANAGEMENT/READ")
...@@ -108,38 +103,38 @@ public class RoleBean implements RoleBeanLocal { ...@@ -108,38 +103,38 @@ public class RoleBean implements RoleBeanLocal {
return returnList; return returnList;
} }
@Override // @Override
@RolesAllowed("ROLE_MANAGEMENT/READ") // @RolesAllowed("ROLE_MANAGEMENT/READ")
public List<RoleRight> getRoleRights(Role r) { // public List<RoleRight> getRoleRights(Role r) {
//
List<RoleRight> ret = new ArrayList<RoleRight>(); // List<RoleRight> ret = new ArrayList<RoleRight>();
for (Permission perm : Permission.values()) { // for (Permission perm : Permission.values()) {
ret.add(findRoleRight(r, perm)); // ret.add(findRoleRight(r, perm));
} // }
return ret; // return ret;
} // }
@Override // @Override
@RolesAllowed("ROLE_MANAGEMENT/WRITE") // @RolesAllowed("ROLE_MANAGEMENT/WRITE")
public RoleRight mergeChanges(RoleRight row) { // public RoleRight mergeChanges(RoleRight row) {
//
return rrfacade.merge(row); // return rrfacade.merge(row);
} // }
@RolesAllowed("ROLE_MANAGEMENT/READ") // @RolesAllowed("ROLE_MANAGEMENT/READ")
public RoleRight findRoleRight(Role role, Permission perm) { // public RoleRight findRoleRight(Role role, Permission perm) {
RoleRight rr = rrfacade.find(perm, role); // RoleRight rr = rrfacade.find(perm, role);
if (rr == null) { // if (rr == null) {
rr = new RoleRight(role, perm, false, false, false); // rr = new RoleRight(role, perm, false, false, false);
rrfacade.create(rr); // rrfacade.create(rr);
} // }
return rr; // return rr;
} // }
@Override @Override
@RolesAllowed("ROLE_MANAGEMENT/READ") @RolesAllowed("ROLE_MANAGEMENT/READ")
public Role find(int id) { public Role find(int id) {
return roleFacade.find(eventBean.getCurrentEvent(), id); return roleFacade.find(id);
} }
} }
...@@ -18,8 +18,7 @@ import javax.persistence.PersistenceContext; ...@@ -18,8 +18,7 @@ import javax.persistence.PersistenceContext;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.GroupMembershipFacade; import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.facade.UserImageFacade; import fi.insomnia.bortal.facade.UserImageFacade;
...@@ -86,7 +85,7 @@ public class UserBean implements UserBeanLocal { ...@@ -86,7 +85,7 @@ public class UserBean implements UserBeanLocal {
public User mergeChanges(User user) throws PermissionDeniedException { public User mergeChanges(User user) throws PermissionDeniedException {
if (!permbean.isCurrentUser(user)) { if (!permbean.isCurrentUser(user)) {
permbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE); permbean.fatalPermission(UserPermission.MODIFY);
} }
User ret = userFacade.merge(user); User ret = userFacade.merge(user);
...@@ -159,7 +158,7 @@ public class UserBean implements UserBeanLocal { ...@@ -159,7 +158,7 @@ public class UserBean implements UserBeanLocal {
} }
if (!permbean.getCurrentUser().getId().equals(userid)) { if (!permbean.getCurrentUser().getId().equals(userid)) {
permbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.EXECUTE, "usert tried to save picture to userid " + userid + " without sufficient permissions!"); permbean.fatalPermission(UserPermission.MODIFY, "usert tried to save picture to userid " + userid + " without sufficient permissions!");
user = userFacade.find(userid); user = userFacade.find(userid);
} }
UserImage userimage = new UserImage(user); UserImage userimage = new UserImage(user);
...@@ -187,7 +186,7 @@ public class UserBean implements UserBeanLocal { ...@@ -187,7 +186,7 @@ public class UserBean implements UserBeanLocal {
} else { } else {
ret = userimagefacade.find(id); ret = userimagefacade.find(id);
if (ret != null && !permbean.isCurrentUser(ret.getUser())) { if (ret != null && !permbean.isCurrentUser(ret.getUser())) {
permbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ, "Not enough rights to access image id: " + id + " for user " + ret.getUser()); permbean.fatalPermission(UserPermission.MODIFY, "Not enough rights to access image id: " + id + " for user " + ret.getUser());
} }
} }
return ret; return ret;
......
...@@ -9,7 +9,7 @@ import fi.insomnia.bortal.model.CardTemplate; ...@@ -9,7 +9,7 @@ import fi.insomnia.bortal.model.CardTemplate;
@Stateless @Stateless
@LocalBean @LocalBean
public class CardTemplateFacade extends EventChildGenericFacade<CardTemplate> { public class CardTemplateFacade extends GenericFacade<Integer, CardTemplate> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
......
...@@ -20,8 +20,8 @@ import org.slf4j.LoggerFactory; ...@@ -20,8 +20,8 @@ import org.slf4j.LoggerFactory;
import fi.iki.tuomari.utils.beans.callbacks.FacadeCallback; import fi.iki.tuomari.utils.beans.callbacks.FacadeCallback;
import fi.iki.tuomari.utils.jpa.IntegerModelInterface; import fi.iki.tuomari.utils.jpa.IntegerModelInterface;
import fi.insomnia.bortal.utilities.ModelInterface;
import fi.insomnia.bortal.utilities.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class GenericFacade<I extends Serializable, C extends ModelInterface<I>> { public abstract class GenericFacade<I extends Serializable, C extends ModelInterface<I>> {
......
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import fi.insomnia.bortal.utilities.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
/** /**
* Session Bean implementation class GenericFacade * Session Bean implementation class GenericFacade
......
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import java.util.Collection;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
...@@ -17,45 +14,45 @@ import fi.insomnia.bortal.model.User; ...@@ -17,45 +14,45 @@ import fi.insomnia.bortal.model.User;
@Stateless @Stateless
@LocalBean @LocalBean
public class RoleFacade extends EventChildGenericFacade<Role> { public class RoleFacade extends GenericFacade<Integer, Role> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
public RoleFacade() { public RoleFacade() {
super(Role.class); super(Role.class);
} }
protected EntityManager getEm() { @Override
return em; protected EntityManager getEm() {
} return em;
}
public Role findByName(String name, LanEvent event) {
TypedQuery<Role> q = em.createNamedQuery("Role.findByRoleName", Role.class); public Role findByName(String name, LanEvent event) {
q.setParameter("name", name); TypedQuery<Role> q = em.createNamedQuery("Role.findByRoleName", Role.class);
q.setParameter("event", event); q.setParameter("name", name);
return getSingleNullableResult(q); q.setParameter("event", event);
} return getSingleNullableResult(q);
}
public List<Role> findForUser(User user, LanEvent event) {
TypedQuery<Role> q = getEm().createNamedQuery("Role.findForUser", Role.class); public List<Role> findForUser(User user, LanEvent event) {
q.setParameter("user", user); TypedQuery<Role> q = getEm().createNamedQuery("Role.findForUser", Role.class);
q.setParameter("event", event); q.setParameter("user", user);
return q.getResultList(); q.setParameter("event", event);
} return q.getResultList();
}
public Role createRole(LanEvent event, String rolename) { public Role createRole(LanEvent event, String rolename) {
Role ret = new Role(event); Role ret = new Role(event);
ret.setName(rolename); ret.setName(rolename);
create(ret); create(ret);
return ret; return ret;
} }
public List<Role> findAll(LanEvent event) { public List<Role> findAll(LanEvent event) {
TypedQuery<Role> q = getEm().createNamedQuery("Role.findForEvent", Role.class); TypedQuery<Role> q = getEm().createNamedQuery("Role.findForEvent", Role.class);
q.setParameter("event", event); q.setParameter("event", event);
return q.getResultList(); return q.getResultList();
} }
} }
package fi.insomnia.bortal.facade;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
@Stateless
@LocalBean
public class RoleRightFacade extends EventChildGenericFacade<RoleRight> {
@PersistenceContext
private EntityManager em;
private static final Logger logger = LoggerFactory.getLogger(RoleRightFacade.class);
public RoleRightFacade() {
super(RoleRight.class);
}
@Override
protected EntityManager getEm() {
return em;
}
public RoleRight find(Permission permission, Role role) {
if (permission == null || role == null) {
return null;
}
TypedQuery<RoleRight> q = this.getEm().createNamedQuery("RoleRight.findByRightAndRole", RoleRight.class);
q.setParameter("permission", permission);
q.setParameter("role", role);
return getSingleNullableResult(q);
}
public List<RoleRight> find(Collection<Role> roles, Permission permission) {
if (roles.size() == 0) {
return new ArrayList<RoleRight>();
}
TypedQuery<RoleRight> q = getEm().createNamedQuery("RoleRight.findByRolesForPermission", RoleRight.class);
Set<Integer> roleids = new HashSet<Integer>();
for (Role r : roles) {
roleids.add(r.getId().getId());
}
Integer eventId = roles.iterator().next().getEvent().getId();
q.setParameter("eventId", eventId);
q.setParameter("roleids", roleids);
q.setParameter("permission", permission);
return q.getResultList();
}
public RoleRight createRoleRight(Role role, Permission perm) {
RoleRight ret = new RoleRight(role, perm, false, false, false);
create(ret);
getEm().flush();
return ret;
}
}
...@@ -7,15 +7,16 @@ import javax.ejb.Local; ...@@ -7,15 +7,16 @@ import javax.ejb.Local;
import fi.insomnia.bortal.model.CardTemplate; import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.jsf.EntityFinderBean;
@Local @Local
public interface CardTemplateBeanLocal { public interface CardTemplateBeanLocal extends EntityFinderBean<CardTemplate> {
List<CardTemplate> findAll(); // List<CardTemplate> findAll();
void create(CardTemplate card); void create(CardTemplate card);
CardTemplate findById(Integer id); CardTemplate find(Integer id);
PrintedCard checkPrintedCard(User user) throws PermissionDeniedException; PrintedCard checkPrintedCard(User user) throws PermissionDeniedException;
......
...@@ -2,13 +2,12 @@ package fi.insomnia.bortal.beans; ...@@ -2,13 +2,12 @@ package fi.insomnia.bortal.beans;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
@Local @Local
public interface PermissionBeanLocal { public interface PermissionBeanLocal {
boolean hasPermission(Permission target, RolePermission permission); boolean hasPermission(IAppPermission perm);
User getCurrentUser(); User getCurrentUser();
...@@ -16,7 +15,7 @@ public interface PermissionBeanLocal { ...@@ -16,7 +15,7 @@ public interface PermissionBeanLocal {
boolean isCurrentUser(User thisuser); boolean isCurrentUser(User thisuser);
void fatalPermission(Permission target, RolePermission permission, Object... failmessage) throws PermissionDeniedException; void fatalPermission(IAppPermission perm, Object... failmessage) throws PermissionDeniedException;
void fatalNotLoggedIn() throws PermissionDeniedException; void fatalNotLoggedIn() throws PermissionDeniedException;
......
...@@ -10,7 +10,6 @@ import java.util.List; ...@@ -10,7 +10,6 @@ import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
/** /**
* *
...@@ -25,10 +24,6 @@ public interface RoleBeanLocal { ...@@ -25,10 +24,6 @@ public interface RoleBeanLocal {
public Role create(Role role); public Role create(Role role);
public RoleRight mergeChanges(RoleRight row);
public List<RoleRight> getRoleRights(Role role);
public List<Role> getPossibleParents(Role role); public List<Role> getPossibleParents(Role role);
public Role find(int val); public Role find(int val);
......
...@@ -3,92 +3,64 @@ package fi.insomnia.bortal.clientutils; ...@@ -3,92 +3,64 @@ package fi.insomnia.bortal.clientutils;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.RoleRight;
public class BortalLocalContextHolder { public class BortalLocalContextHolder {
private static final ThreadLocal<BortalLocalContextHolder> THREAD_WITH_CONTEXT = new ThreadLocal<BortalLocalContextHolder>(); private static final ThreadLocal<BortalLocalContextHolder> THREAD_WITH_CONTEXT = new ThreadLocal<BortalLocalContextHolder>();
private String hostname; private String hostname;
private final Map<Permission, Map<RolePermission, Boolean>> rightcache = new HashMap<Permission, Map<RolePermission, Boolean>>(); private final Map<IAppPermission, Boolean> rightcache = new HashMap<IAppPermission, Boolean>();
public BortalLocalContextHolder() { public BortalLocalContextHolder() {
} }
public static void setHostname(String hostname) { public static void setHostname(String hostname) {
getThread().hostname = hostname; getThread().hostname = hostname;
} }
public static String getHostname() { public static String getHostname() {
return getThread().getHolderHostname(); return getThread().getHolderHostname();
} }
public static void cleanupThread() { public static void cleanupThread() {
if (THREAD_WITH_CONTEXT != null) { if (THREAD_WITH_CONTEXT != null) {
THREAD_WITH_CONTEXT.remove(); THREAD_WITH_CONTEXT.remove();
} }
} }
public String getHolderHostname() { public String getHolderHostname() {
return hostname; return hostname;
} }
public static Boolean hasPermission(Permission target, RolePermission permission) { public static Boolean hasPermission(IAppPermission permission) {
return getThread().hasHolderPermission(target, permission); return getThread().hasHolderPermission(permission);
} }
private static BortalLocalContextHolder getThread() { private static BortalLocalContextHolder getThread() {
if (THREAD_WITH_CONTEXT.get() == null) { if (THREAD_WITH_CONTEXT.get() == null) {
THREAD_WITH_CONTEXT.set(new BortalLocalContextHolder()); THREAD_WITH_CONTEXT.set(new BortalLocalContextHolder());
} }
return THREAD_WITH_CONTEXT.get(); return THREAD_WITH_CONTEXT.get();
} }
private Boolean hasHolderPermission(Permission target, RolePermission permission) { private Boolean hasHolderPermission(IAppPermission target) {
Map<RolePermission, Boolean> permmap = rightcache.get(target); return rightcache.get(target);
if (permmap == null) { }
permmap = new HashMap<RolePermission, Boolean>();
rightcache.put(target, permmap);
}
return permmap.get(permission);
}
public static void setPermission(Permission target, RolePermission permission, Boolean ret) { public static void setPermission(IAppPermission permission, Boolean value) {
getThread().setHolderPermission(target, permission, ret); getThread().rightcache.put(permission, value);
} }
private void setHolderPermission(Permission target, RolePermission permission, Boolean ret) { public static BortalLocalContextHolder getInstance() {
Map<RolePermission, Boolean> permmap = rightcache.get(target); return getThread();
if (permmap == null) { }
permmap = new HashMap<RolePermission, Boolean>();
rightcache.put(target, permmap);
}
permmap.put(permission, ret);
}
public static void setPermission(RoleRight rr) {
if (rr.isExecute()) {
setPermission(rr.getPermission(), RolePermission.EXECUTE, true);
}
if (rr.isWrite()) {
setPermission(rr.getPermission(), RolePermission.WRITE, true);
}
if (rr.isRead()) {
setPermission(rr.getPermission(), RolePermission.READ, true);
}
}
public static BortalLocalContextHolder getInstance() {
return getThread();
}
} }
\ No newline at end of file
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;
import fi.insomnia.bortal.enums.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission;
/**
*
* @author jkj
*/
@Entity
@Table(name = "application_permissions", uniqueConstraints = { @UniqueConstraint(columnNames = { ApplicationPermission.ROLE_ID_COLUMN, ApplicationPermission.APPLICATION_COLUMN, ApplicationPermission.PERMISSION_COLUMN }) })
public class ApplicationPermission extends GenericEntity {
protected static final String APPLICATION_PERMISSION_CONVERTER = "application_permission_perm_typeconverter";
private static final long serialVersionUID = -7768599976770042101L;
protected static final String ROLE_ID_COLUMN = "role_id";
public static final String APPLICATION_COLUMN = "application";
public static final String PERMISSION_COLUMN = "permission";
@Column(name = APPLICATION_COLUMN, nullable = false, length = 40)
private String application;
// @ManyToOne
// @JoinColumn(nullable = false, name = EVENT_ID_COLUMN)
// private LanEvent event;
@ManyToOne(optional = false)
@JoinColumn(nullable = false, name = ROLE_ID_COLUMN)
private Role role;
@Column(nullable = false, name = PERMISSION_COLUMN, length = 40)
private String permission;
public ApplicationPermission() {
super();
}
public ApplicationPermission(Role role) {
this.role = role;
}
public ApplicationPermission(Role role, IAppPermission perm) {
this(role);
this.role = role;
setPermission(perm);
}
public Role getRole() {
return role;
}
public void setRole(Role rolesId) {
this.role = rolesId;
}
@Transient
private BortalApplication privateApp;
@Transient
private IAppPermission privatePerm;
public BortalApplication getApplication() {
if (privateApp == null && application != null) {
privateApp = BortalApplication.valueOf(application);
}
return privateApp;
}
public void setPermission(IAppPermission perm) {
privatePerm = perm;
privateApp = perm.getParent();
this.application = perm.getParent().toString();
this.permission = perm.toString();
}
public IAppPermission getPermission() {
if (privatePerm == null && application != null && permission != null) {
for (IAppPermission appPerm : BortalApplication.valueOf(application).getPermissions()) {
if (appPerm.equals(permission)) {
privatePerm = appPerm;
break;
}
}
}
return privatePerm;
}
}
...@@ -25,8 +25,9 @@ import javax.persistence.Table; ...@@ -25,8 +25,9 @@ import javax.persistence.Table;
@NamedQueries({ @NamedQueries({
@NamedQuery(name = "CardTemplate.findAll", query = "SELECT c FROM CardTemplate c"), @NamedQuery(name = "CardTemplate.findAll", query = "SELECT c FROM CardTemplate c"),
@NamedQuery(name = "CardTemplate.findByName", query = "SELECT c FROM CardTemplate c WHERE c.name = :name") }) @NamedQuery(name = "CardTemplate.findByName", query = "SELECT c FROM CardTemplate c WHERE c.name = :name") })
public class CardTemplate extends GenericEventChild { public class CardTemplate extends GenericEntity {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = -5754760238181167610L;
@Lob @Lob
@Column(name = "template_image") @Column(name = "template_image")
...@@ -45,7 +46,7 @@ public class CardTemplate extends GenericEventChild { ...@@ -45,7 +46,7 @@ public class CardTemplate extends GenericEventChild {
private List<PrintedCard> cards; private List<PrintedCard> cards;
@ManyToOne @ManyToOne
@JoinColumn(name = "event_id", referencedColumnName = "id", updatable = false, insertable = false) @JoinColumn(nullable = false, name = "event_id", referencedColumnName = LanEvent.ID_COLUMN)
private LanEvent event; private LanEvent event;
public CardTemplate() { public CardTemplate() {
...@@ -53,11 +54,12 @@ public class CardTemplate extends GenericEventChild { ...@@ -53,11 +54,12 @@ public class CardTemplate extends GenericEventChild {
} }
public CardTemplate(LanEvent event) { public CardTemplate(LanEvent event) {
super(event); super();
this.event = event;
} }
public CardTemplate(LanEvent event, String templateName) { public CardTemplate(LanEvent event, String templateName) {
super(event); this(event);
this.name = templateName; this.name = templateName;
} }
......
...@@ -61,9 +61,7 @@ public class Discount extends GenericEventChild { ...@@ -61,9 +61,7 @@ public class Discount extends GenericEventChild {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "discount") @OneToMany(cascade = CascadeType.ALL, mappedBy = "discount")
private List<DiscountInstance> discountInstances; private List<DiscountInstance> discountInstances;
@JoinColumns({ @JoinColumn(name = "role_id", referencedColumnName = "id")
@JoinColumn(name = "role_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne() @ManyToOne()
private Role role; private Role role;
......
...@@ -14,8 +14,8 @@ import javax.persistence.GenerationType; ...@@ -14,8 +14,8 @@ import javax.persistence.GenerationType;
@Embeddable @Embeddable
public class EventPk implements Serializable { public class EventPk implements Serializable {
public static final String ID_COLUMN = "id"; private static final String ID_COLUMN = GenericEventChild.ID_COLUMN;
public static final String EVENT_ID_COLUMN = "event_id"; private static final String EVENT_ID_COLUMN = GenericEventChild.EVENT_ID_COLUMN;
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = ID_COLUMN, nullable = false) @Column(name = ID_COLUMN, nullable = false)
private Integer id; private Integer id;
......
...@@ -7,14 +7,15 @@ import javax.persistence.Id; ...@@ -7,14 +7,15 @@ import javax.persistence.Id;
import javax.persistence.MappedSuperclass; import javax.persistence.MappedSuperclass;
import javax.persistence.Version; import javax.persistence.Version;
import fi.insomnia.bortal.utilities.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
@MappedSuperclass @MappedSuperclass
public class GenericEntity extends EntityEquals implements ModelInterface<Integer> { public class GenericEntity extends EntityEquals implements ModelInterface<Integer> {
private static final long serialVersionUID = -9041737052951021560L; private static final long serialVersionUID = -9041737052951021560L;
public static final String ID_COLUMN = "id";
@Id @Id
@Column(name = "id", nullable = false) @Column(name = ID_COLUMN, nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id; private Integer id;
......
...@@ -7,13 +7,15 @@ import javax.persistence.ManyToOne; ...@@ -7,13 +7,15 @@ import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass; import javax.persistence.MappedSuperclass;
import javax.persistence.Version; import javax.persistence.Version;
import fi.insomnia.bortal.utilities.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
@MappedSuperclass @MappedSuperclass
public abstract class GenericEventChild extends EntityEquals implements ModelInterface<EventPk> { public abstract class GenericEventChild extends EntityEquals implements ModelInterface<EventPk> {
private static final long serialVersionUID = -9041737052951021560L; private static final long serialVersionUID = -9041737052951021560L;
public static final String ID_COLUMN = "id";
public static final String EVENT_ID_COLUMN = "event_id";
@EmbeddedId @EmbeddedId
private EventPk id; private EventPk id;
@Version @Version
...@@ -21,7 +23,7 @@ public abstract class GenericEventChild extends EntityEquals implements ModelInt ...@@ -21,7 +23,7 @@ public abstract class GenericEventChild extends EntityEquals implements ModelInt
private int jpaVersionField = 0; private int jpaVersionField = 0;
@ManyToOne() @ManyToOne()
@JoinColumn(name = EventPk.EVENT_ID_COLUMN, insertable = false, updatable = false) @JoinColumn(name = EVENT_ID_COLUMN, insertable = false, updatable = false)
private LanEvent event; private LanEvent event;
public GenericEventChild(LanEvent event) { public GenericEventChild(LanEvent event) {
......
...@@ -11,7 +11,6 @@ import javax.persistence.CascadeType; ...@@ -11,7 +11,6 @@ import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries; import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery; import javax.persistence.NamedQuery;
...@@ -72,9 +71,7 @@ public class LanEvent extends GenericEntity { ...@@ -72,9 +71,7 @@ public class LanEvent extends GenericEntity {
@OneToMany(mappedBy = "parentEvent") @OneToMany(mappedBy = "parentEvent")
private List<LogEntry> logEntries; private List<LogEntry> logEntries;
@JoinColumns({ @JoinColumn(name = "default_role_id", referencedColumnName = "id")
@JoinColumn(name = "default_role_id", referencedColumnName = "id"),
@JoinColumn(name = "id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@OneToOne @OneToOne
private Role defaultRole; private Role defaultRole;
......
...@@ -51,9 +51,7 @@ public class NewsGroup extends GenericEventChild { ...@@ -51,9 +51,7 @@ public class NewsGroup extends GenericEventChild {
private int priority; private int priority;
@ManyToOne(optional = false) @ManyToOne(optional = false)
@JoinColumns({ @JoinColumns({ @JoinColumn(name = "writer_role_id", referencedColumnName = Role.ID_COLUMN, nullable = false), })
@JoinColumn(name = "writer_role_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
private Role writerRole; private Role writerRole;
@OrderBy("priority") @OrderBy("priority")
...@@ -62,10 +60,9 @@ public class NewsGroup extends GenericEventChild { ...@@ -62,10 +60,9 @@ public class NewsGroup extends GenericEventChild {
@ManyToMany @ManyToMany
@JoinTable(name = "read_group_roles", joinColumns = { @JoinTable(name = "read_group_roles", joinColumns = {
@JoinColumn(name = "read_group_id", referencedColumnName = "id"), @JoinColumn(name = "read_group_id", referencedColumnName = ID_COLUMN),
@JoinColumn(name = "event_id", referencedColumnName = "event_id") }, inverseJoinColumns = { @JoinColumn(name = "event_id", referencedColumnName = EVENT_ID_COLUMN) }, inverseJoinColumns = {
@JoinColumn(name = "role_id", referencedColumnName = "id"), @JoinColumn(name = "role_id", referencedColumnName = Role.ID_COLUMN) })
@JoinColumn(name = "event_id", referencedColumnName = "event_id") })
private List<Role> readerRoles; private List<Role> readerRoles;
public NewsGroup() { public NewsGroup() {
......
...@@ -76,9 +76,7 @@ public class Place extends GenericEventChild { ...@@ -76,9 +76,7 @@ public class Place extends GenericEventChild {
private PlaceGroup group; private PlaceGroup group;
@ManyToOne @ManyToOne
@JoinColumns({ @JoinColumn(name = "provided_role_id", referencedColumnName = "id")
@JoinColumn(name = "provided_role_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
private Role providesRole; private Role providesRole;
@JoinColumns({ @JoinColumns({
......
...@@ -31,8 +31,8 @@ import javax.persistence.UniqueConstraint; ...@@ -31,8 +31,8 @@ import javax.persistence.UniqueConstraint;
*/ */
@Entity @Entity
@Table(name = "printed_cards", uniqueConstraints = { @Table(name = "printed_cards", uniqueConstraints = {
@UniqueConstraint(columnNames = { "rfid_uid", "event_id" }), @UniqueConstraint(columnNames = { "event_id", "rfid_uid", }),
@UniqueConstraint(columnNames = { "barcode", "event_id" }) }) @UniqueConstraint(columnNames = { "event_id", "barcode" }) })
@NamedQueries({ @NamedQueries({
@NamedQuery(name = "PrintedCard.findAll", query = "SELECT p FROM PrintedCard p"), @NamedQuery(name = "PrintedCard.findAll", query = "SELECT p FROM PrintedCard p"),
...@@ -75,9 +75,7 @@ public class PrintedCard extends GenericEventChild { ...@@ -75,9 +75,7 @@ public class PrintedCard extends GenericEventChild {
@ManyToOne(optional = false) @ManyToOne(optional = false)
private User user; private User user;
@JoinColumns({ @JoinColumn(nullable = false, name = "card_template_id", referencedColumnName = CardTemplate.ID_COLUMN)
@JoinColumn(name = "card_template_id", referencedColumnName = "id", nullable = false, updatable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne(optional = false) @ManyToOne(optional = false)
private CardTemplate template; private CardTemplate template;
......
...@@ -11,7 +11,6 @@ import javax.persistence.CascadeType; ...@@ -11,7 +11,6 @@ import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.JoinTable; import javax.persistence.JoinTable;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
...@@ -54,9 +53,7 @@ public class Product extends GenericEventChild { ...@@ -54,9 +53,7 @@ public class Product extends GenericEventChild {
@Column(name = "instant_shop") @Column(name = "instant_shop")
private boolean prepaidInstant = false; private boolean prepaidInstant = false;
@JoinColumns({ @JoinColumn(name = "provided_role_id", referencedColumnName = "id")
@JoinColumn(name = "provided_role_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) })
@ManyToOne @ManyToOne
private Role provides; private Role provides;
......
...@@ -11,8 +11,6 @@ import javax.persistence.CascadeType; ...@@ -11,8 +11,6 @@ import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries; import javax.persistence.NamedQueries;
...@@ -25,21 +23,25 @@ import javax.persistence.UniqueConstraint; ...@@ -25,21 +23,25 @@ import javax.persistence.UniqueConstraint;
* *
*/ */
@Entity @Entity
@Table(name = "roles", uniqueConstraints = { @UniqueConstraint(columnNames = { "event_id", "role_name" }) }) @Table(name = "roles", uniqueConstraints = { @UniqueConstraint(columnNames = { Role.EVENT_ID_COLUMN, Role.NAME_COLUMN }) })
@NamedQueries({ @NamedQueries({
@NamedQuery(name = "Role.findForEvent", query = "SELECT r FROM Role r where r.event = :event"), @NamedQuery(name = "Role.findForEvent", query = "SELECT r FROM Role r where r.event = :event"),
@NamedQuery(name = "Role.findByRoleName", query = "SELECT r FROM Role r WHERE r.name = :name and r.event = :event"), @NamedQuery(name = "Role.findByRoleName", query = "SELECT r FROM Role r WHERE r.name = :name and r.event = :event"),
// @NamedQuery(name="Role.findParentsExcluding", query="select r from // @NamedQuery(name="Role.findParentsExcluding", query="select r from
// Role r, RoleRight rr where :user member of r.users ), // Role r, RoleRight rr where :user member of r.users ),
@NamedQuery(name = "Role.findForUser", query = "SELECT r FROM Role r WHERE :user MEMBER OF r.users and r.event = :event") }) @NamedQuery(name = "Role.findForUser", query = "SELECT r FROM Role r WHERE :user MEMBER OF r.users and r.event = :event") })
public class Role extends GenericEventChild { public class Role extends GenericEntity {
/** /**
* *
*/ */
private static final long serialVersionUID = -4602863502464505404L; private static final long serialVersionUID = -4602863502464505404L;
@Column(name = "role_name", nullable = false) protected static final String NAME_COLUMN = "role_name";
protected static final String EVENT_ID_COLUMN = "event_id";
@Column(name = NAME_COLUMN, nullable = false)
private String name; private String name;
@ManyToMany(mappedBy = "roles") @ManyToMany(mappedBy = "roles")
...@@ -55,21 +57,11 @@ public class Role extends GenericEventChild { ...@@ -55,21 +57,11 @@ public class Role extends GenericEventChild {
private List<Place> placesProvide; private List<Place> placesProvide;
@ManyToMany() @ManyToMany()
@JoinTable(name = "role_parents",
inverseJoinColumns = {
@JoinColumn(name = "children_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) },
joinColumns = {
@JoinColumn(name = "parent_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) })
private List<Role> parents = new ArrayList<Role>(); private List<Role> parents = new ArrayList<Role>();
@OneToMany(cascade = CascadeType.ALL, mappedBy = "role") @OneToMany(cascade = CascadeType.ALL, mappedBy = "role")
private List<RoleRight> roleRights; private List<ApplicationPermission> permissions;
@JoinColumns({
@JoinColumn(name = "card_template_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) })
@ManyToOne @ManyToOne
private CardTemplate cardTemplate; private CardTemplate cardTemplate;
...@@ -83,7 +75,7 @@ public class Role extends GenericEventChild { ...@@ -83,7 +75,7 @@ public class Role extends GenericEventChild {
private List<NewsGroup> newsGroups; private List<NewsGroup> newsGroups;
@ManyToOne @ManyToOne
@JoinColumn(name = "event_id", referencedColumnName = "id", updatable = false, insertable = false) @JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event; private LanEvent event;
public Role() { public Role() {
...@@ -91,7 +83,6 @@ public class Role extends GenericEventChild { ...@@ -91,7 +83,6 @@ public class Role extends GenericEventChild {
} }
public Role(LanEvent event) { public Role(LanEvent event) {
super(event);
this.event = event; this.event = event;
} }
...@@ -108,14 +99,6 @@ public class Role extends GenericEventChild { ...@@ -108,14 +99,6 @@ public class Role extends GenericEventChild {
this.name = roleName; this.name = roleName;
} }
public List<RoleRight> getRoleRights() {
return roleRights;
}
public void setRoleRights(List<RoleRight> roleRightList) {
this.roleRights = roleRightList;
}
public CardTemplate getCardTemplate() { public CardTemplate getCardTemplate() {
return cardTemplate; return cardTemplate;
} }
...@@ -194,5 +177,14 @@ public class Role extends GenericEventChild { ...@@ -194,5 +177,14 @@ public class Role extends GenericEventChild {
public List<NewsGroup> getWriteNews() { public List<NewsGroup> getWriteNews() {
return writeNews; return writeNews;
}
public void setPermissions(List<ApplicationPermission> permissions) {
this.permissions = permissions;
}
public List<ApplicationPermission> getPermissions() {
return permissions;
} }
} }
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.ConversionValue;
import org.eclipse.persistence.annotations.Convert;
import org.eclipse.persistence.annotations.ObjectTypeConverter;
import fi.insomnia.bortal.enums.Permission;
/**
*
* @author jkj
*/
@Entity
@Table(name = "role_rights", uniqueConstraints = { @UniqueConstraint(columnNames = { "event_id", "role_id", "permission" }) })
@NamedQueries({ @NamedQuery(name = "RoleRight.findAll", query = "SELECT r FROM RoleRight r"),
@NamedQuery(name = "RoleRight.findByRightAndRole", query = "SELECT r FROM RoleRight r where r.role = :role and r.permission = :permission "),
@NamedQuery(name = "RoleRight.findByRolesForPermission", query = "SELECT rr from RoleRight rr where rr.role.id.eventId = :eventId and rr.role.id.id in :roleids and rr.permission = :permission") })
@ObjectTypeConverter(name = "permissionconverter", objectType = Permission.class, dataType = String.class, conversionValues = {
@ConversionValue(dataValue = "LOGIN", objectValue = "LOGIN"),
@ConversionValue(dataValue = "USER_MANAGEMENT", objectValue = "USER_MANAGEMENT"),
@ConversionValue(dataValue = "ACCOUNT_MANAGEMENT", objectValue = "ACCOUNT_MANAGEMENT"),
@ConversionValue(dataValue = "MAP", objectValue = "MAP"),
@ConversionValue(dataValue = "BILL", objectValue = "BILL"),
@ConversionValue(dataValue = "ROLE_MANAGEMENT", objectValue = "ROLE_MANAGEMENT"),
@ConversionValue(dataValue = "PRODUCT", objectValue = "PRODUCT"),
@ConversionValue(dataValue = "SHOP", objectValue = "SHOP"),
@ConversionValue(dataValue = "GAME", objectValue = "GAME"),
@ConversionValue(dataValue = "POLL", objectValue = "POLL")
})
public class RoleRight extends GenericEventChild {
private static final long serialVersionUID = 1L;
@Column(name = "read_permission", nullable = false)
private boolean read = false;
@Column(name = "write_permission", nullable = false)
private boolean write = false;
@Column(name = "execute_permission", nullable = false)
private boolean execute = false;
// @JoinColumn(name = "access_right_id", referencedColumnName = "id")
// @ManyToOne
// private AccessRight accessRight;
@Convert("permissionconverter")
@Column(name = "permission", nullable = false)
private Permission permission;
@JoinColumns({
@JoinColumn(name = "role_id", referencedColumnName = "id", nullable = false, updatable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne(optional = false)
private Role role;
public RoleRight() {
super();
}
public RoleRight(Role role) {
this(new EventPk(role.getEvent()));
this.role = role;
}
public RoleRight(Role role, Permission right, boolean read, boolean write, boolean execute) {
this(role);
this.setPermission(right);
this.read = read;
this.write = write;
this.execute = execute;
}
public RoleRight(EventPk eventPk) {
super(eventPk);
}
public boolean isRead() {
return read;
}
public void setRead(boolean read) {
this.read = read;
}
public boolean isWrite() {
return write;
}
public void setWrite(boolean write) {
this.write = write;
}
public Role getRole() {
return role;
}
public void setRole(Role rolesId) {
this.role = rolesId;
}
public void setExecute(boolean execute) {
this.execute = execute;
}
public boolean isExecute() {
return execute;
}
public void setPermission(Permission permission) {
this.permission = permission;
}
public Permission getPermission() {
return permission;
}
}
...@@ -130,8 +130,7 @@ public class User extends GenericEntity { ...@@ -130,8 +130,7 @@ public class User extends GenericEntity {
@ManyToMany() @ManyToMany()
@JoinTable(name = "role_memberships", inverseJoinColumns = { @JoinTable(name = "role_memberships", inverseJoinColumns = {
@JoinColumn(name = "role_id", referencedColumnName = "id"), @JoinColumn(name = "role_id", referencedColumnName = Role.ID_COLUMN) },
@JoinColumn(name = "event_id", referencedColumnName = "event_id") },
joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") }) joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") })
private List<Role> roles = new ArrayList<Role>(); private List<Role> roles = new ArrayList<Role>();
......
package fi.insomnia.bortal.model.converters;
import org.eclipse.persistence.mappings.foundation.AbstractTransformationMapping;
import org.eclipse.persistence.mappings.transformers.AttributeTransformer;
import org.eclipse.persistence.mappings.transformers.FieldTransformer;
import org.eclipse.persistence.sessions.Record;
import org.eclipse.persistence.sessions.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.model.ApplicationPermission;
public class ApplicationPermissionFieldConverter implements AttributeTransformer, FieldTransformer {
/**
*
*/
private static final long serialVersionUID = 861773188187491632L;
private static final Logger logger = LoggerFactory.getLogger(ApplicationPermissionFieldConverter.class);
// record - - The metadata being used to build the object.
// session - - the current session
// object - - The current object that the attribute is being built for.
@Override
public Object buildAttributeValue(Record record, Object object, Session session) {
logger.debug("Converting record {} to object object {}", record, object);
if (object instanceof ApplicationPermission) {
ApplicationPermission destperm = (ApplicationPermission) object;
logger.debug("destprm appPerm {}", destperm.getApplication());
Object appNameObj = record.get(ApplicationPermission.APPLICATION_COLUMN);
Object permissionObject = record.get(ApplicationPermission.PERMISSION_COLUMN);
try {
if (appNameObj == null || permissionObject == null) {
logger.warn("Application name field in record is empty! {}", record);
return null;
}
String permstr = permissionObject.toString();
BortalApplication appEnum = BortalApplication.valueOf(appNameObj.toString());
for (IAppPermission perm : appEnum.getPermissions()) {
if (perm.toString().equals(permstr)) {
return perm;
}
}
logger.warn("Value {} could not be translated to permission of {}", permstr, appEnum);
} catch (IllegalArgumentException e) {
logger.warn("Value not found in enums while converting ApplicationPermission , AppnameObj {} permissionObj {}", appNameObj, permissionObject);
} catch (NullPointerException ne) {
logger.warn("Caught null pointer in while convertion ApplicatoinPermission to object. AppName: {}, permissionName {}", appNameObj, permissionObject);
}
}
return null;
}
@Override
public void initialize(AbstractTransformationMapping arg0) {
}
// instance - - an instance of the domain class which contains the attribute
// session - - the current session
// fieldName - - the name of the field being transformed. Used if the user
// wants to use this transformer for multiple fields.
@Override
public Object buildFieldValue(Object instance, String session, Session fieldName) {
logger.debug("Converting permission of instance {}. Fieldname {}", instance, fieldName);
if (instance instanceof ApplicationPermission) {
return ((ApplicationPermission) instance).getPermission().toString();
}
return null;
}
}
package fi.insomnia.bortal.enums; package fi.insomnia.bortal.enums;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.FixPerm;
import fi.insomnia.bortal.enums.apps.IAppPermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.LoginPermissions; import fi.insomnia.bortal.enums.apps.LoginPermission;
import fi.insomnia.bortal.enums.apps.UserPermissions; import fi.insomnia.bortal.enums.apps.UserPermission;
public enum BortalApplication { public enum BortalApplication {
// NOTE. add conversion Value to RoleRight // NOTE. add conversion Value to RoleRight
// PERMISSION("Description"), // PERMISSION("Description"),
LOGIN("Login related permissions", LoginPermissions.class), LOGIN("Login related permissions", LoginPermission.class),
USER("User management related", UserPermissions.class), USER("User management related", UserPermission.class),
USER_MANAGEMENT("View all users(r), modify users(w), execute actions for user(x) "), USER_MANAGEMENT("View all users(r), modify users(w), execute actions for user(x) "),
ACCOUNT_MANAGEMENT("Manage others account events. view(r), modify(w) and create (shop)(x)"), ACCOUNT_MANAGEMENT("Manage others account events. view(r), modify(w) and create (shop)(x)"),
BILL("View all bills(r), Mark paid & modify(w), and create own bills (x)"), BILL("View all bills(r), Mark paid & modify(w), and create own bills (x)", BillPermission.class),
MAP("view maps(r), Modify(w), reserve places from maps(x)"), MAP("view maps(r), Modify(w), reserve places from maps(x)"),
ROLE_MANAGEMENT("User has right to view(r), modify(w) and assign(x) roles"), ROLE_MANAGEMENT("User has right to view(r), modify(w) and assign(x) roles"),
PRODUCT("View(r), modify(w), and shop(x) products"), PRODUCT("View(r), modify(w), and shop(x) products"),
...@@ -35,7 +37,7 @@ public enum BortalApplication { ...@@ -35,7 +37,7 @@ public enum BortalApplication {
private BortalApplication(String descr) { private BortalApplication(String descr) {
this.permissions = LoginPermissions.class; this.permissions = FixPerm.class;
this.setDescription(descr); this.setDescription(descr);
} }
...@@ -46,4 +48,5 @@ public enum BortalApplication { ...@@ -46,4 +48,5 @@ public enum BortalApplication {
public String getDescription() { public String getDescription() {
return description; return description;
} }
} }
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.enums;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author tuukka
*/
public enum Permission {
// NOTE. add conversion Value to RoleRight
// PERMISSION("Description"),
LOGIN("User can see loginbutton(r), create new user(w), invite others (x)"),
USER_MANAGEMENT("View all users(r), modify users(w), execute actions for user(x) "),
ACCOUNT_MANAGEMENT("Manage others account events. view(r), modify(w) and create (shop)(x)"),
BILL("View all bills(r), Mark paid & modify(w), and create own bills (x)"),
MAP("view maps(r), Modify(w), reserve places from maps(x)"),
ROLE_MANAGEMENT("User has right to view(r), modify(w) and assign(x) roles"),
PRODUCT("View(r), modify(w), and shop(x) products"),
SHOP("View own shopped events(r), Modify own AccountEvents() and Shop(x)"),
GAME("View(r) own, modify(w), view all(X)"),
POLL("View answers(r), create polls (w), answer to polls(x)");
private String description;
private static final Logger logger = LoggerFactory.getLogger(Permission.class);
public static final String EXECUTE = "/EXECUTE";
public static final String READ = "/READ";
public static final String WRITE = "/WRITE";
public static Permission getPermission(String name) {
if (name == null || name.isEmpty()) {
logger.warn("Trying to get permission for empty name {}", name);
return null;
}
try {
return valueOf(name);
} catch (IllegalArgumentException x) {
throw x;
}
}
Permission(String description) {
this.description = description;
}
Permission() {
}
public String getName() {
return name();
}
/**
* @return the description
*/
public String getDescription() {
return description;
}
}
package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum BillPermission implements IAppPermission {
READ_ALL("Read all bills"), WRITE_ALL("Modify all bills"), CREATE_BILL("Create bills for self")
;
private String description;
private String fullName;
private BillPermission(String desc) {
description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.BILL;
}
@Override
public String getDescription() {
return this.description;
}
@Override
public String getFullName() {
return fullName;
}
}
package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum FixPerm implements IAppPermission {
FIX("FIX THIS");
private final String description;
private final String fullName;
private FixPerm(String desc) {
this.description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.LOGIN;
}
@Override
public String getDescription() {
return this.description;
}
@Override
public String getFullName() {
return fullName;
}
}
...@@ -6,8 +6,12 @@ import fi.insomnia.bortal.enums.BortalApplication; ...@@ -6,8 +6,12 @@ import fi.insomnia.bortal.enums.BortalApplication;
public interface IAppPermission extends Serializable { public interface IAppPermission extends Serializable {
static final String DELIMITER = "/";
public BortalApplication getParent(); public BortalApplication getParent();
public String getDescription(); public String getDescription();
public String getFullName();
} }
...@@ -2,14 +2,16 @@ package fi.insomnia.bortal.enums.apps; ...@@ -2,14 +2,16 @@ package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication; import fi.insomnia.bortal.enums.BortalApplication;
public enum LoginPermissions implements IAppPermission { public enum LoginPermission implements IAppPermission {
LOGIN("Can login"), LOGOUT("Can logout"); LOGIN("Can login"), LOGOUT("Can logout");
private String description; private String description;
private String fullName;
private LoginPermissions(String desc) { private LoginPermission(String desc) {
this.description = desc; this.description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
} }
@Override @Override
...@@ -17,7 +19,13 @@ public enum LoginPermissions implements IAppPermission { ...@@ -17,7 +19,13 @@ public enum LoginPermissions implements IAppPermission {
return BortalApplication.LOGIN; return BortalApplication.LOGIN;
} }
@Override
public String getDescription() { public String getDescription() {
return this.description; return this.description;
} }
@Override
public String getFullName() {
return fullName;
}
} }
package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum MapPermission implements IAppPermission {
MANAGE_OTHERS("Manage other users reservations in map"), BUY_PLACES("Reserve and buy places from map"), VIEW("View maps");
private String description;
private String fullName;
private MapPermission(String desc) {
description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.USER;
}
@Override
public String getDescription() {
return description;
}
@Override
public String getFullName() {
return fullName;
}
}
...@@ -2,13 +2,16 @@ package fi.insomnia.bortal.enums.apps; ...@@ -2,13 +2,16 @@ package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication; import fi.insomnia.bortal.enums.BortalApplication;
public enum UserPermissions implements IAppPermission { public enum UserPermission implements IAppPermission {
VIEW("View all users"), MODIFY("Modify users"); VIEW("View all users"), MODIFY("Modify users");
private String description; private String description;
private String fullName;
private UserPermissions(String desc) { private UserPermission(String desc) {
description = desc; description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
} }
@Override @Override
...@@ -20,4 +23,9 @@ public enum UserPermissions implements IAppPermission { ...@@ -20,4 +23,9 @@ public enum UserPermissions implements IAppPermission {
public String getDescription() { public String getDescription() {
return description; return description;
} }
@Override
public String getFullName() {
return fullName;
}
} }
...@@ -3,6 +3,8 @@ package fi.insomnia.bortal.utilities; ...@@ -3,6 +3,8 @@ package fi.insomnia.bortal.utilities;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class SearchResult<T extends ModelInterface<?>> implements Serializable { public class SearchResult<T extends ModelInterface<?>> implements Serializable {
/** /**
......
package fi.insomnia.bortal.utilities; package fi.insomnia.bortal.utilities.jpa;
import java.io.Serializable; import java.io.Serializable;
......
package fi.insomnia.bortal.utilities.jsf;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public interface EntityFinderBean<E extends ModelInterface<Integer>> {
public E find(Integer id);
}
...@@ -21,8 +21,7 @@ import org.slf4j.LoggerFactory; ...@@ -21,8 +21,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal; import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.RoleBeanLocal; import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
/** /**
...@@ -61,26 +60,27 @@ public class SessionHandler { ...@@ -61,26 +60,27 @@ public class SessionHandler {
return "insomnia2"; return "insomnia2";
} }
public boolean hasPermission(String target, String permission) { // public boolean hasPermission(String target, String permission) {
RolePermission perm = RolePermission.valueOf(permission.toUpperCase()); // RolePermission perm = RolePermission.valueOf(permission.toUpperCase());
// RolePermission perm = null; // // RolePermission perm = null;
// if (permission.equalsIgnoreCase("read")) { // // if (permission.equalsIgnoreCase("read")) {
// perm = RolePermission.READ; // // perm = RolePermission.READ;
// } else if (permission.equals("write")) { // // } else if (permission.equals("write")) {
// perm = RolePermission.WRITE; // // perm = RolePermission.WRITE;
// } else if (permission.equals("execute")) { // // } else if (permission.equals("execute")) {
// perm = RolePermission.EXECUTE; // // perm = RolePermission.EXECUTE;
// }else { // // }else {
// throw new RuntimeException("permission " + permission + // // throw new RuntimeException("permission " + permission +
// " does not match any") // // " does not match any")
// } // // }
if (perm == null) { // if (perm == null) {
logger.warn("Permission {} does not have matching value in RolePermission enum!"); // logger.warn("Permission {} does not have matching value in RolePermission enum!");
throw new RuntimeException("Matching role permission could not be found!"); // throw new
} // RuntimeException("Matching role permission could not be found!");
// }
return hasPermission(target, perm); //
} // return hasPermission(target, perm);
// }
// //
// private HttpSession getHttpSession() { // private HttpSession getHttpSession() {
...@@ -94,33 +94,16 @@ public class SessionHandler { ...@@ -94,33 +94,16 @@ public class SessionHandler {
// return permbean.hasPermission(perm); // return permbean.hasPermission(perm);
// } // }
public boolean hasPermission(Permission target, RolePermission permission) { public boolean hasPermission(IAppPermission permission) {
if (target == null || permission == null) { if (permission == null) {
logger.warn("Target {} or permission {} is null", target, permission); logger.warn("permission {} is null", permission);
throw new RuntimeException("Empty target or permission!"); throw new RuntimeException("Empty target or permission!");
} }
boolean ret = permbean.hasPermission(target, permission); boolean ret = permbean.hasPermission(permission);
return ret; return ret;
} }
public boolean hasPermission(String target, RolePermission permission) {
return hasPermission(Permission.getPermission(target), permission);
}
public boolean canWrite(String target) {
return hasPermission(target, RolePermission.WRITE);
}
public boolean canRead(String target) {
return hasPermission(target, RolePermission.READ);
}
public boolean canExecute(String target) {
return hasPermission(target, RolePermission.EXECUTE);
}
public String logout() { public String logout() {
FacesContext ctx = FacesContext.getCurrentInstance(); FacesContext ctx = FacesContext.getCurrentInstance();
...@@ -152,7 +135,4 @@ public class SessionHandler { ...@@ -152,7 +135,4 @@ public class SessionHandler {
} }
public String fatalPermission(String target, String right) {
return "FATALPERM!!: " + target + " " + right;
}
} }
...@@ -28,8 +28,7 @@ import org.slf4j.LoggerFactory; ...@@ -28,8 +28,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PermissionBeanLocal; import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.PermissionDeniedException; import fi.insomnia.bortal.beans.PermissionDeniedException;
import fi.insomnia.bortal.beans.PlaceMapBeanLocal; import fi.insomnia.bortal.beans.PlaceMapBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.EventMap; import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Place; import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
...@@ -119,7 +118,7 @@ public class PlaceMap extends HttpServlet { ...@@ -119,7 +118,7 @@ public class PlaceMap extends HttpServlet {
private void printPlaceMapToStream(OutputStream outputStream, String filetype, EventMap map) throws IOException, PermissionDeniedException { private void printPlaceMapToStream(OutputStream outputStream, String filetype, EventMap map) throws IOException, PermissionDeniedException {
permbean.fatalPermission(Permission.MAP, RolePermission.READ, "User tried to print the placemap to Stream"); permbean.fatalPermission(MapPermission.VIEW, "User tried to print the placemap to Stream");
long begin = new Date().getTime(); long begin = new Date().getTime();
......
...@@ -5,8 +5,7 @@ import javax.enterprise.context.ConversationScoped; ...@@ -5,8 +5,7 @@ import javax.enterprise.context.ConversationScoped;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.beans.AccountEventBeanLocal; import fi.insomnia.bortal.beans.AccountEventBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.AccountEvent; import fi.insomnia.bortal.model.AccountEvent;
@Named @Named
...@@ -28,7 +27,7 @@ public class AccountEventView extends GenericCDIView { ...@@ -28,7 +27,7 @@ public class AccountEventView extends GenericCDIView {
public void initView() { public void initView() {
canSave = permbean.hasPermission(Permission.USER_MANAGEMENT, RolePermission.READ); canSave = permbean.hasPermission(UserPermission.VIEW);
if (requirePermissions(permbean.isLoggedIn(), canSave)) { if (requirePermissions(permbean.isLoggedIn(), canSave)) {
beginConversation(); beginConversation();
accountevent = accounteventbean.find(getPk(accountid)); accountevent = accounteventbean.find(getPk(accountid));
......
...@@ -9,8 +9,7 @@ import javax.inject.Inject; ...@@ -9,8 +9,7 @@ import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.beans.BillBeanLocal; import fi.insomnia.bortal.beans.BillBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.Bill; import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.annotations.SelectedUser; import fi.insomnia.bortal.web.annotations.SelectedUser;
...@@ -33,10 +32,13 @@ public class BillListView extends GenericCDIView { ...@@ -33,10 +32,13 @@ public class BillListView extends GenericCDIView {
private ListDataModel<Bill> bills; private ListDataModel<Bill> bills;
private boolean writeBill;
public void initAllBills() { public void initAllBills() {
if (super.requirePermissions(Permission.BILL, RolePermission.READ)) { if (super.requirePermissions(BillPermission.READ_ALL)) {
beginConversation(); beginConversation();
bills = new ListDataModel<Bill>(billbean.findAll()); bills = new ListDataModel<Bill>(billbean.findAll());
writeBill = permbean.hasPermission(BillPermission.WRITE_ALL);
} }
} }
...@@ -44,11 +46,14 @@ public class BillListView extends GenericCDIView { ...@@ -44,11 +46,14 @@ public class BillListView extends GenericCDIView {
if (requirePermissions(permbean.isLoggedIn())) { if (requirePermissions(permbean.isLoggedIn())) {
beginConversation(); beginConversation();
bills = new ListDataModel<Bill>(user.getBills()); bills = new ListDataModel<Bill>(user.getBills());
writeBill = permbean.hasPermission(BillPermission.WRITE_ALL);
} }
} }
public String markPaid() { public String markPaid() {
if (permbean.hasPermission(Permission.BILL, RolePermission.WRITE)) { if (permbean.hasPermission(BillPermission.WRITE_ALL)) {
billbean.markPaid(bills.getRowData(), Calendar.getInstance()); billbean.markPaid(bills.getRowData(), Calendar.getInstance());
this.addFaceMessage("bill.markedPaid"); this.addFaceMessage("bill.markedPaid");
...@@ -71,6 +76,6 @@ public class BillListView extends GenericCDIView { ...@@ -71,6 +76,6 @@ public class BillListView extends GenericCDIView {
} }
public boolean canWriteBill() { public boolean canWriteBill() {
return permbean.hasPermission(Permission.BILL, RolePermission.WRITE); return writeBill;
} }
} }
...@@ -14,8 +14,7 @@ import org.slf4j.LoggerFactory; ...@@ -14,8 +14,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal; import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.handler.NavigationHandler; import fi.insomnia.bortal.handler.NavigationHandler;
import fi.insomnia.bortal.model.EventPk; import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.utilities.I18n; import fi.insomnia.bortal.utilities.I18n;
...@@ -47,10 +46,10 @@ public abstract class GenericCDIView implements Serializable { ...@@ -47,10 +46,10 @@ public abstract class GenericCDIView implements Serializable {
} }
protected boolean requirePermissions(Permission perm, RolePermission rp, boolean... externalChecks) { protected boolean requirePermissions(IAppPermission perm, boolean... externalChecks) {
boolean[] perms = new boolean[externalChecks.length + 1]; boolean[] perms = new boolean[externalChecks.length + 1];
perms[0] = permbean.hasPermission(perm, rp); perms[0] = permbean.hasPermission(perm);
if (externalChecks.length == 0) { if (externalChecks.length == 0) {
System.arraycopy(externalChecks, 0, perms, 1, externalChecks.length); System.arraycopy(externalChecks, 0, perms, 1, externalChecks.length);
} }
......
...@@ -7,8 +7,7 @@ import javax.enterprise.context.RequestScoped; ...@@ -7,8 +7,7 @@ import javax.enterprise.context.RequestScoped;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.beans.NewsBeanLocal; import fi.insomnia.bortal.beans.NewsBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.FixPerm;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.NewsGroup; import fi.insomnia.bortal.model.NewsGroup;
@Named @Named
...@@ -26,7 +25,7 @@ public class NewsListView extends GenericCDIView { ...@@ -26,7 +25,7 @@ public class NewsListView extends GenericCDIView {
private List<NewsGroup> newsgroups; private List<NewsGroup> newsgroups;
public void initView() { public void initView() {
if (super.requirePermissions(permbean.hasPermission(Permission.ROLE_MANAGEMENT, RolePermission.READ))) { if (super.requirePermissions(permbean.hasPermission(FixPerm.FIX))) {
setNewsgroups(newsbean.findAll()); setNewsgroups(newsbean.findAll());
} }
} }
......
...@@ -5,8 +5,7 @@ import javax.enterprise.context.ConversationScoped; ...@@ -5,8 +5,7 @@ import javax.enterprise.context.ConversationScoped;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.beans.NewsBeanLocal; import fi.insomnia.bortal.beans.NewsBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.FixPerm;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.NewsGroup; import fi.insomnia.bortal.model.NewsGroup;
@Named @Named
...@@ -23,7 +22,7 @@ public class NewsgroupView extends GenericCDIView { ...@@ -23,7 +22,7 @@ public class NewsgroupView extends GenericCDIView {
private NewsGroup newsgroup; private NewsGroup newsgroup;
public void initView() { public void initView() {
if (super.requirePermissions(permbean.hasPermission(Permission.ROLE_MANAGEMENT, RolePermission.READ))) { if (super.requirePermissions(permbean.hasPermission(FixPerm.FIX))) {
super.beginConversation(); super.beginConversation();
if (newsgroupid == 0 && newsgroup == null) { if (newsgroupid == 0 && newsgroup == null) {
newsgroup = new NewsGroup(); newsgroup = new NewsGroup();
......
...@@ -7,8 +7,7 @@ import javax.inject.Named; ...@@ -7,8 +7,7 @@ import javax.inject.Named;
import fi.insomnia.bortal.beans.PermissionDeniedException; import fi.insomnia.bortal.beans.PermissionDeniedException;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.FixPerm;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.annotations.SelectedUser; import fi.insomnia.bortal.web.annotations.SelectedUser;
...@@ -32,7 +31,7 @@ public class PasswordView extends GenericCDIView { ...@@ -32,7 +31,7 @@ public class PasswordView extends GenericCDIView {
private String passwordcheck; private String passwordcheck;
public String changePassword() { public String changePassword() {
if (permbean.isCurrentUser(user) || permbean.hasPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE)) { if (permbean.isCurrentUser(user) || permbean.hasPermission(FixPerm.FIX)) {
if (password != null && password.equals(passwordcheck)) { if (password != null && password.equals(passwordcheck)) {
user.resetPassword(password); user.resetPassword(password);
try { try {
......
...@@ -17,8 +17,7 @@ import org.slf4j.LoggerFactory; ...@@ -17,8 +17,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PermissionDeniedException; import fi.insomnia.bortal.beans.PermissionDeniedException;
import fi.insomnia.bortal.beans.PlaceBeanLocal; import fi.insomnia.bortal.beans.PlaceBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.FixPerm;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.BortalCatchableException; import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.model.EventMap; import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Place; import fi.insomnia.bortal.model.Place;
...@@ -97,7 +96,7 @@ public class PlaceView extends GenericCDIView { ...@@ -97,7 +96,7 @@ public class PlaceView extends GenericCDIView {
} }
public void initView() { public void initView() {
if (super.requirePermissions(Permission.MAP, RolePermission.WRITE)) { if (super.requirePermissions(FixPerm.FIX)) {
if (getPlaceId() != null) { if (getPlaceId() != null) {
this.place = placebean.find(getPlaceId()); this.place = placebean.find(getPlaceId());
} }
......
...@@ -16,8 +16,7 @@ import fi.insomnia.bortal.beans.BillBeanLocal; ...@@ -16,8 +16,7 @@ import fi.insomnia.bortal.beans.BillBeanLocal;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.PermissionDeniedException; import fi.insomnia.bortal.beans.PermissionDeniedException;
import fi.insomnia.bortal.beans.ProductBeanLocal; import fi.insomnia.bortal.beans.ProductBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.FixPerm;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.Bill; import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.annotations.SelectedUser; import fi.insomnia.bortal.web.annotations.SelectedUser;
...@@ -48,9 +47,9 @@ public class ProductShopView extends GenericCDIView { ...@@ -48,9 +47,9 @@ public class ProductShopView extends GenericCDIView {
public void initView() { public void initView() {
this.beginConversation(); this.beginConversation();
if (permbean.hasPermission(Permission.SHOP, RolePermission.EXECUTE)) { if (permbean.hasPermission(FixPerm.FIX)) {
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts())); shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts()));
} else if (requirePermissions(permbean.hasPermission(Permission.ACCOUNT_MANAGEMENT, RolePermission.EXECUTE))) { } else if (requirePermissions(permbean.hasPermission(FixPerm.FIX))) {
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.getProducts())); shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.getProducts()));
} }
} }
......
...@@ -6,8 +6,7 @@ import javax.enterprise.context.RequestScoped; ...@@ -6,8 +6,7 @@ import javax.enterprise.context.RequestScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.FixPerm;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.web.helpers.RfidEvent; import fi.insomnia.bortal.web.helpers.RfidEvent;
@Named @Named
...@@ -25,7 +24,7 @@ public class ReaderView extends GenericCDIView { ...@@ -25,7 +24,7 @@ public class ReaderView extends GenericCDIView {
private RfidContainer container; private RfidContainer container;
public void initView() { public void initView() {
super.requirePermissions(permbean.hasPermission(Permission.USER_MANAGEMENT, RolePermission.READ)); super.requirePermissions(permbean.hasPermission(FixPerm.FIX));
} }
public List<RfidEvent> getReaderEvents() { public List<RfidEvent> getReaderEvents() {
......
...@@ -4,8 +4,6 @@ import java.util.List; ...@@ -4,8 +4,6 @@ import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -13,10 +11,8 @@ import org.slf4j.LoggerFactory; ...@@ -13,10 +11,8 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.RoleBeanLocal; import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.FixPerm;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
@ConversationScoped @ConversationScoped
@Named @Named
...@@ -35,45 +31,44 @@ public class RoleView extends GenericCDIView { ...@@ -35,45 +31,44 @@ public class RoleView extends GenericCDIView {
@EJB @EJB
private EventBeanLocal eventbean; private EventBeanLocal eventbean;
private ListDataModel<RoleRight> rolerights;
private static final Logger logger = LoggerFactory.getLogger(RoleView.class); private static final Logger logger = LoggerFactory.getLogger(RoleView.class);
public void permissionCreate() { public void permissionCreate() {
requirePermissions(permbean.hasPermission(Permission.ROLE_MANAGEMENT, RolePermission.WRITE)); requirePermissions(permbean.hasPermission(FixPerm.FIX));
} }
public void permissionRead() { public void permissionRead() {
requirePermissions(permbean.hasPermission(Permission.ROLE_MANAGEMENT, RolePermission.READ)); requirePermissions(permbean.hasPermission(FixPerm.FIX));
} }
public void initForCreate() { public void initForCreate() {
if (role == null && requirePermissions(permbean.hasPermission(Permission.ROLE_MANAGEMENT, RolePermission.WRITE))) { if (role == null && requirePermissions(permbean.hasPermission(FixPerm.FIX))) {
role = new Role(eventbean.getCurrentEvent()); role = new Role(eventbean.getCurrentEvent());
super.beginConversation(); super.beginConversation();
} }
} }
public String saveRoleRight() { //
// public String saveRoleRight() {
for (RoleRight rr : rolerights) { //
rolebean.mergeChanges(rr); // for (RoleRight rr : rolerights) {
} // rolebean.mergeChanges(rr);
rolerights = null; // }
// rolerights = null;
return "editRoleright"; //
} // return "editRoleright";
// }
public DataModel<RoleRight> getRoleRights() { //
// public DataModel<RoleRight> getRoleRights() {
if (rolerights == null && role != null) { //
rolerights = new ListDataModel<RoleRight>(rolebean.getRoleRights(role)); // if (rolerights == null && role != null) {
} // rolerights = new ListDataModel<RoleRight>(rolebean.getRoleRights(role));
return rolerights; // }
} // return rolerights;
// }
public void initViewFromId() { public void initViewFromId() {
if (requirePermissions(permbean.hasPermission(Permission.ROLE_MANAGEMENT, RolePermission.WRITE))) { if (requirePermissions(permbean.hasPermission(FixPerm.FIX))) {
super.beginConversation(); super.beginConversation();
role = rolebean.find(getRoleid()); role = rolebean.find(getRoleid());
logger.debug("Initialized role: {} from id ", role, getRoleid()); logger.debug("Initialized role: {} from id ", role, getRoleid());
...@@ -81,7 +76,7 @@ public class RoleView extends GenericCDIView { ...@@ -81,7 +76,7 @@ public class RoleView extends GenericCDIView {
} }
public String create() { public String create() {
super.requirePermissions(permbean.hasPermission(Permission.ROLE_MANAGEMENT, RolePermission.WRITE)); super.requirePermissions(permbean.hasPermission(FixPerm.FIX));
role = rolebean.create(getRole()); role = rolebean.create(getRole());
return "roleCreated"; return "roleCreated";
} }
...@@ -108,14 +103,6 @@ public class RoleView extends GenericCDIView { ...@@ -108,14 +103,6 @@ public class RoleView extends GenericCDIView {
return rolebean.getPossibleParents(getRole()); return rolebean.getPossibleParents(getRole());
} }
public void setRolerights(ListDataModel<RoleRight> rolerights) {
this.rolerights = rolerights;
}
public ListDataModel<RoleRight> getRolerights() {
return rolerights;
}
public void setRoleid(int roleid) { public void setRoleid(int roleid) {
this.roleid = roleid; this.roleid = roleid;
} }
......
...@@ -6,8 +6,7 @@ import javax.faces.model.ListDataModel; ...@@ -6,8 +6,7 @@ import javax.faces.model.ListDataModel;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.FixPerm;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
@Named @Named
...@@ -30,7 +29,7 @@ public class UserSearchView extends GenericCDIView implements IPaginationView { ...@@ -30,7 +29,7 @@ public class UserSearchView extends GenericCDIView implements IPaginationView {
private ListDataModel<User> users; private ListDataModel<User> users;
public void initView() { public void initView() {
if (requirePermissions(permbean.hasPermission(Permission.USER_MANAGEMENT, RolePermission.READ))) { if (requirePermissions(permbean.hasPermission(FixPerm.FIX))) {
users = new ListDataModel<User>(userbean.getUsers(page, pagesize, sort, search)); users = new ListDataModel<User>(userbean.getUsers(page, pagesize, sort, search));
resultcount = userbean.getUsersCount(search); resultcount = userbean.getUsersCount(search);
pagecount = ((resultcount + pagesize - 1) / pagesize); pagecount = ((resultcount + pagesize - 1) / pagesize);
......
...@@ -10,8 +10,7 @@ import org.slf4j.LoggerFactory; ...@@ -10,8 +10,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PermissionDeniedException; import fi.insomnia.bortal.beans.PermissionDeniedException;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.apps.FixPerm;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.annotations.LoggedIn; import fi.insomnia.bortal.web.annotations.LoggedIn;
import fi.insomnia.bortal.web.annotations.SelectedUser; import fi.insomnia.bortal.web.annotations.SelectedUser;
...@@ -43,7 +42,7 @@ public class UserView extends GenericCDIView { ...@@ -43,7 +42,7 @@ public class UserView extends GenericCDIView {
@SelectedUser @SelectedUser
public User getSelectedUser() { public User getSelectedUser() {
if (user == null) { if (user == null) {
if (userid > 0 && permbean.hasPermission(Permission.USER_MANAGEMENT, RolePermission.READ)) { if (userid > 0 && permbean.hasPermission(FixPerm.FIX)) {
user = userbean.findById(userid); user = userbean.findById(userid);
} else { } else {
user = getCurrentUser(); user = getCurrentUser();
...@@ -53,7 +52,7 @@ public class UserView extends GenericCDIView { ...@@ -53,7 +52,7 @@ public class UserView extends GenericCDIView {
} }
public void initCreateView() { public void initCreateView() {
if (super.requirePermissions(permbean.hasPermission(Permission.LOGIN, RolePermission.WRITE))) { if (super.requirePermissions(permbean.hasPermission(FixPerm.FIX))) {
if (user == null) { if (user == null) {
user = new User(); user = new User();
} }
...@@ -69,13 +68,13 @@ public class UserView extends GenericCDIView { ...@@ -69,13 +68,13 @@ public class UserView extends GenericCDIView {
*/ */
if (super.requirePermissions(permbean.isLoggedIn())) { if (super.requirePermissions(permbean.isLoggedIn())) {
getSelectedUser(); getSelectedUser();
canSave = getCurrentUser().equals(user) || permbean.hasPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE); canSave = getCurrentUser().equals(user) || permbean.hasPermission(FixPerm.FIX);
this.beginConversation(); this.beginConversation();
} }
} }
public String saveUser() { public String saveUser() {
if (permbean.getCurrentUser().getId().equals(userid) || permbean.hasPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE)) { if (permbean.getCurrentUser().getId().equals(userid) || permbean.hasPermission(FixPerm.FIX)) {
this.addFaceMessage("user.saveSuccessfull"); this.addFaceMessage("user.saveSuccessfull");
try { try {
user = userbean.mergeChanges(user); user = userbean.mergeChanges(user);
......
...@@ -2,49 +2,22 @@ package fi.insomnia.bortal.web.converter; ...@@ -2,49 +2,22 @@ package fi.insomnia.bortal.web.converter;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal; import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.model.CardTemplate; import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.EventPk; import fi.insomnia.bortal.utilities.jsf.EntityFinderBean;
@Named("cardTemplateConverter") @Named("cardTemplateConverter")
@RequestScoped @RequestScoped
public class CardTemplateConverter implements Converter { public class CardTemplateConverter extends GenericIntegerEntityConverter<CardTemplate> {
@EJB @EJB
private CardTemplateBeanLocal ctbean; private CardTemplateBeanLocal ctbean;
private static final Logger logger = LoggerFactory.getLogger(CardTemplateBeanLocal.class);
@Override @Override
public Object getAsObject(FacesContext context, UIComponent component, String value) { protected EntityFinderBean<CardTemplate> getFinder() {
if (value == null || value.isEmpty()) { return ctbean;
return null;
}
Integer id = Integer.valueOf(value);
logger.debug("Converting CardTemplate value '{}', to id {}", value, id);
CardTemplate ret = ctbean.findById(id);
return ret;
} }
@Override //
public String getAsString(FacesContext context, UIComponent component, Object value) {
String ret = "";
if (value instanceof CardTemplate) {
EventPk id = ((CardTemplate) value).getId();
if (id != null) {
ret = id.getId().toString();
}
} else {
throw new RuntimeException("Entity not of type CardTemplate!!");
}
return ret;
}
} }
package fi.insomnia.bortal.web.converter;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.GenericEntity;
import fi.insomnia.bortal.utilities.jsf.EntityFinderBean;
public abstract class GenericIntegerEntityConverter<T extends GenericEntity> implements Converter {
protected abstract EntityFinderBean<T> getFinder();
public GenericIntegerEntityConverter() {
super();
}
private static final Logger logger = LoggerFactory.getLogger(GenericIntegerEntityConverter.class);
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
T ret = null;
Integer id = null;
if (value != null) {
id = Integer.parseInt(value);
if (id != null) {
ret = getFinder().find(id);
}
}
logger.debug("Converted String {} to Integer {} became object {}", new Object[] { value, id, ret });
return ret;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
String ret = null;
if (value != null && value instanceof GenericEntity) {
GenericEntity entity = (GenericEntity) value;
ret = entity.getId().toString();
}
return ret;
}
}
...@@ -33,7 +33,7 @@ public class RoleConverter implements Converter { ...@@ -33,7 +33,7 @@ public class RoleConverter implements Converter {
public String getAsString(FacesContext context, UIComponent component, Object value) { public String getAsString(FacesContext context, UIComponent component, Object value) {
String ret = ""; String ret = "";
if (value instanceof Role) { if (value instanceof Role) {
ret = ((Role) value).getId().getId().toString(); ret = ((Role) value).getId().toString();
} }
logger.debug("converting role {} to string", ret); logger.debug("converting role {} to string", ret);
return ret; return ret;
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!