Commit 68e3194c by Tuukka Kivilahti

accessrights fixed, new nice enum

1 parent eb293e5e
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.facade.AccessRightFacade;
import fi.insomnia.bortal.model.AccessRight;
import javax.ejb.EJB;
import javax.ejb.Stateless;
/**
*
* @author tuukka
*/
@Stateless
public class AccessRightBean implements AccessRightBeanLocal {
@EJB
private AccessRightFacade accessRightFacade;
public AccessRight findOrCreate(Permission permission) {
AccessRight right = accessRightFacade.findByPermission(permission);
if (right == null) {
right = new AccessRight();
right.setName(permission.name());
right.setDescription(permission.getDescription());
accessRightFacade.create(right);
}
return right;
}
}
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
*/ */
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.enums.EventStatusEnum;
import fi.insomnia.bortal.facade.EventStatusFacade; import fi.insomnia.bortal.facade.EventStatusFacade;
import fi.insomnia.bortal.model.EventStatus; import fi.insomnia.bortal.model.EventStatus;
import javax.ejb.EJB; import javax.ejb.EJB;
......
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import java.security.Principal; import java.security.Principal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Enumeration; import java.util.Enumeration;
...@@ -16,7 +18,6 @@ import javax.ejb.Stateless; ...@@ -16,7 +18,6 @@ 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.RoleFacade; import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.UserFacade; import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccessRight; import fi.insomnia.bortal.model.AccessRight;
...@@ -36,7 +37,7 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal, SessionHandl ...@@ -36,7 +37,7 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal, SessionHandl
@EJB @EJB
private UserFacade userfacade; private UserFacade userfacade;
@EJB @EJB
private AccessRightFacade accessRightFacade; private AccessRightBeanLocal accessRightBeanLocal;
@EJB @EJB
private RoleFacade roleFacade; private RoleFacade roleFacade;
@Resource @Resource
...@@ -52,13 +53,13 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal, SessionHandl ...@@ -52,13 +53,13 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal, SessionHandl
// TODO Auto-generated constructor stub // TODO Auto-generated constructor stub
} }
@Override
public boolean hasPermission(String target, User user, RolePermission permission) { public boolean hasPermission(Permission target, User user, RolePermission permission) {
if (user == null) { if (user == null) {
return false; return false;
} }
AccessRight expectedRight = accessRightFacade.findOrCreateByName(target); AccessRight expectedRight = accessRightBeanLocal.findOrCreate(target);
User dbusr = userfacade.find(user.getId()); User dbusr = userfacade.find(user.getId());
if (dbusr != null) { if (dbusr != null) {
......
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import fi.insomnia.bortal.enums.Permission;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
...@@ -22,7 +23,7 @@ public class AccessRightFacade extends IntegerPkGenericFacade<AccessRight> { ...@@ -22,7 +23,7 @@ public class AccessRightFacade extends IntegerPkGenericFacade<AccessRight> {
protected EntityManager getEm() { protected EntityManager getEm() {
return em; return em;
} }
/*
public AccessRight findOrCreateByName(String target) { public AccessRight findOrCreateByName(String target) {
// Fetch access right by name // Fetch access right by name
...@@ -40,4 +41,16 @@ public class AccessRightFacade extends IntegerPkGenericFacade<AccessRight> { ...@@ -40,4 +41,16 @@ public class AccessRightFacade extends IntegerPkGenericFacade<AccessRight> {
return right; return right;
} }
*/
public AccessRight findByPermission(Permission target) {
// Fetch access right by name
TypedQuery<AccessRight> q = em.createQuery("SELECT a FROM AccessRight a WHERE a.name = :name", AccessRight.class);
q.setParameter("name", target.name());
AccessRight right = null;
right = this.getSingleNullableResult(q);
return right;
}
} }
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import fi.insomnia.bortal.beans.EventStatusEnum; import fi.insomnia.bortal.enums.EventStatusEnum;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
......
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.model.AccessRight;
import javax.ejb.Local;
/**
*
* @author tuukka
*/
@Local
public interface AccessRightBeanLocal {
public AccessRight findOrCreate(Permission permission);
}
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.model.Event; import fi.insomnia.bortal.model.Event;
...@@ -8,7 +10,7 @@ import fi.insomnia.bortal.model.User; ...@@ -8,7 +10,7 @@ import fi.insomnia.bortal.model.User;
@Local @Local
public interface SessionHandlerBeanLocal { public interface SessionHandlerBeanLocal {
boolean hasPermission(String target, User user, RolePermission permission); boolean hasPermission(Permission target, User user, RolePermission permission);
User getDefaultUser(Event event); User getDefaultUser(Event event);
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* and open the template in the editor. * and open the template in the editor.
*/ */
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.enums;
/** /**
* *
......
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.enums;
import javax.naming.directory.InvalidAttributesException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author tuukka
*/
public enum Permission {
PERMISSION("Description"),
LOGIN("User can see loginbutton. (only defaultuser should have permission to that one)");
private static final Logger logger = LoggerFactory.getLogger(Permission.class);
private String description;
public static Permission getPermission(String name) {
try {
return valueOf(name);
} catch (IllegalArgumentException x) {
logger.error("There is no permission named: "+name);
throw x;
}
}
Permission(String description) {
this.description = description;
}
/**
* @return the description
*/
public String getDescription() {
return description;
}
}
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.enums;
public enum RolePermission { public enum RolePermission {
READ, WRITE, EXECUTE READ, WRITE, EXECUTE
......
...@@ -23,11 +23,15 @@ dist.javadoc.dir=${dist.dir}/javadoc ...@@ -23,11 +23,15 @@ dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath= endorsed.classpath=
excludes= excludes=
file.reference.LanBortalBeansClient-ejbModule=ejbModule file.reference.LanBortalBeansClient-ejbModule=ejbModule
file.reference.slf4j-api-1.5.8.jar=/home/tuukka/NetBeansProjects/bortal/code/LanBortal/EarContent/lib/slf4j-api-1.5.8.jar
file.reference.slf4j-jdk14-1.5.8.jar=/home/tuukka/NetBeansProjects/bortal/code/LanBortal/EarContent/lib/slf4j-jdk14-1.5.8.jar
includes=** includes=**
jar.compress=false jar.compress=false
javac.classpath=\ javac.classpath=\
${libs.javaee-api-6.0.classpath}:\ ${libs.javaee-api-6.0.classpath}:\
${reference.LanBortalDatabase.jar} ${reference.LanBortalDatabase.jar}:\
${file.reference.slf4j-api-1.5.8.jar}:\
${file.reference.slf4j-jdk14-1.5.8.jar}
# Space-separated list of extra javac options # Space-separated list of extra javac options
javac.compilerargs= javac.compilerargs=
javac.deprecation=false javac.deprecation=false
......
...@@ -2,32 +2,32 @@ ...@@ -2,32 +2,32 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html <html
xmlns="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html" xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite" xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools"> xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface> <composite:interface>
<composite:attribute name="target" required="true" /> <composite:attribute name="target" required="true" />
<composite:facet name="errormessage" /> <composite:facet name="errormessage" />
</composite:interface> </composite:interface>
<composite:implementation> <composite:implementation>
<c:choose> <c:choose>
<c:when test='#{sessionHandler.canRead(target) }'> <c:when test='#{sessionHandler.canRead(cc.attrs.target) }'>
<composite:insertChildren /> <composite:insertChildren />
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<c:if test="#{not empty compositeComponent.facets.errormessage}"> <c:if test="#{not empty compositeComponent.facets.errormessage}">
<composite:insertFacet name="errormessage" /> <composite:insertFacet name="errormessage" />
</c:if> </c:if>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</composite:implementation> </composite:implementation>
</html> </html>
\ No newline at end of file
...@@ -18,21 +18,21 @@ ...@@ -18,21 +18,21 @@
<c:choose> <c:choose>
<c:when test="#{not empty cc.attrs.isOneliner}"> <c:when test="#{not empty cc.attrs.isOneliner}">
<input type="text" name="j_username" /> <input type="text" name="j_username" />
<input type="password" name="j_password" /> <input type="password" name="j_password" />
<input type="submit" value="#{i18n['login.submit']}" /> <input type="submit" value="#{i18n['login.submit']}" />
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputText value="#{i18n['login.username']}" /> <h:outputText value="#{i18n['login.username']}" />
<input type="text" name="j_username" /> <input type="text" name="j_username" />
<h:outputText value="#{i18n['login.password']}" /> <h:outputText value="#{i18n['login.password']}" />
<input type="password" name="j_password" /> <input type="password" name="j_password" />
</h:panelGrid> </h:panelGrid>
<input type="submit" value="#{i18n['login.submit']}" /> <input type="submit" value="#{i18n['login.submit']}" />
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
</composite:interface> </composite:interface>
<composite:implementation> <composite:implementation>
<tools:canRead target="login"> <tools:canRead target="LOGIN">
<f:facet name="errorMessage"> <f:facet name="errorMessage">
<login:logout /> <login:logout />
</f:facet> </f:facet>
......
...@@ -13,9 +13,10 @@ import javax.servlet.http.HttpSession; ...@@ -13,9 +13,10 @@ import javax.servlet.http.HttpSession;
import fi.insomnia.bortal.HostnameFilter; import fi.insomnia.bortal.HostnameFilter;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.RolePermission;
import fi.insomnia.bortal.beans.SecurityBeanLocal; import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.beans.SessionHandlerBeanLocal; import fi.insomnia.bortal.beans.SessionHandlerBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.Event; import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
...@@ -30,10 +31,8 @@ public class SessionHandler { ...@@ -30,10 +31,8 @@ public class SessionHandler {
@EJB @EJB
private SessionHandlerBeanLocal handlerbean; private SessionHandlerBeanLocal handlerbean;
private User user = null; private User user = null;
@EJB @EJB
private SecurityBeanLocal secubean; private SecurityBeanLocal secubean;
@EJB @EJB
private EventBeanLocal eventbean; private EventBeanLocal eventbean;
...@@ -75,7 +74,12 @@ public class SessionHandler { ...@@ -75,7 +74,12 @@ public class SessionHandler {
} }
public boolean hasPermission(String target, RolePermission permission) { public boolean hasPermission(String target, RolePermission permission) {
return handlerbean.hasPermission(target, getUser(), permission); if (target == null || target.isEmpty()) {
throw new RuntimeException("Empty target");
}
return handlerbean.hasPermission(Permission.getPermission(target), getUser(), permission);
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!