Commit 05514018 by Juho Juopperi

strong typing to access right checking

1 parent 08e84d44
...@@ -9,7 +9,9 @@ import javax.ejb.Stateless; ...@@ -9,7 +9,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.facade.AccessRightFacade;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccessRight;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight; import fi.insomnia.bortal.model.RoleRight;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
...@@ -20,9 +22,11 @@ import fi.insomnia.bortal.model.User; ...@@ -20,9 +22,11 @@ import fi.insomnia.bortal.model.User;
@Stateless @Stateless
public class SessionHandlerBean implements SessionHandlerBeanLocal { public class SessionHandlerBean implements SessionHandlerBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(SessionHandlerBean.class);
@EJB @EJB
private UserFacade userfacade; private UserFacade userfacade;
private static final Logger logger = LoggerFactory.getLogger(SessionHandlerBean.class); @EJB
private AccessRightFacade accessRightFacade;
/** /**
* Default constructor. * Default constructor.
...@@ -33,10 +37,13 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal { ...@@ -33,10 +37,13 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal {
@Override @Override
public boolean hasPermission(String target, User user, RolePermission permission) { public boolean hasPermission(String target, User user, RolePermission permission) {
AccessRight expectedRight = accessRightFacade.findOrCreateByName(target);
User dbusr = userfacade.find(user.getId()); User dbusr = userfacade.find(user.getId());
Set<Role> checkedRoles = new HashSet<Role>(); Set<Role> checkedRoles = new HashSet<Role>();
for (Role r : dbusr.getRoles()) { for (Role r : dbusr.getRoles()) {
if (getRights(r, target, permission, checkedRoles)) { if (getRights(r, expectedRight, permission, checkedRoles)) {
return true; return true;
} }
...@@ -45,14 +52,14 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal { ...@@ -45,14 +52,14 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal {
return false; return false;
} }
private static boolean getRights(Role role, String target, RolePermission permission, Set<Role> checkedRoles) { private static boolean getRights(Role role, AccessRight expectedRight, RolePermission permission, Set<Role> checkedRoles) {
if (checkedRoles.contains(role)) { if (checkedRoles.contains(role)) {
return false; return false;
} }
for (RoleRight rr : role.getRoleRights()) { for (RoleRight rr : role.getRoleRights()) {
if (rr.getAccessRight().getAccessRight().equals(target)) { if (rr.getAccessRight().equals(expectedRight)) {
switch (permission) { switch (permission) {
case READ: case READ:
if (rr.getRead()) { if (rr.getRead()) {
...@@ -74,7 +81,7 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal { ...@@ -74,7 +81,7 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal {
checkedRoles.add(role); checkedRoles.add(role);
for (Role r : role.getParents()) { for (Role r : role.getParents()) {
if (getRights(r, target, permission, checkedRoles)) { if (getRights(r, expectedRight, permission, checkedRoles)) {
return true; return true;
} }
......
...@@ -21,4 +21,9 @@ public class AccessRightFacade extends GenericFacade<AccessRight> { ...@@ -21,4 +21,9 @@ public class AccessRightFacade extends GenericFacade<AccessRight> {
return em; return em;
} }
public AccessRight findOrCreateByName(String target) {
// TODO Auto-generated method stub
return null;
}
} }
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!