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 @@
*/
package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.enums.EventStatusEnum;
import fi.insomnia.bortal.facade.EventStatusFacade;
import fi.insomnia.bortal.model.EventStatus;
import javax.ejb.EJB;
......
package fi.insomnia.bortal.beans;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Enumeration;
......@@ -16,7 +18,6 @@ import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.AccessRightFacade;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccessRight;
......@@ -36,7 +37,7 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal, SessionHandl
@EJB
private UserFacade userfacade;
@EJB
private AccessRightFacade accessRightFacade;
private AccessRightBeanLocal accessRightBeanLocal;
@EJB
private RoleFacade roleFacade;
@Resource
......@@ -52,13 +53,13 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal, SessionHandl
// 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) {
return false;
}
AccessRight expectedRight = accessRightFacade.findOrCreateByName(target);
AccessRight expectedRight = accessRightBeanLocal.findOrCreate(target);
User dbusr = userfacade.find(user.getId());
if (dbusr != null) {
......
package fi.insomnia.bortal.facade;
import fi.insomnia.bortal.enums.Permission;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
......@@ -22,7 +23,7 @@ public class AccessRightFacade extends IntegerPkGenericFacade<AccessRight> {
protected EntityManager getEm() {
return em;
}
/*
public AccessRight findOrCreateByName(String target) {
// Fetch access right by name
......@@ -40,4 +41,16 @@ public class AccessRightFacade extends IntegerPkGenericFacade<AccessRight> {
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;
import fi.insomnia.bortal.beans.EventStatusEnum;
import fi.insomnia.bortal.enums.EventStatusEnum;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
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;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import javax.ejb.Local;
import fi.insomnia.bortal.model.Event;
......@@ -8,7 +10,7 @@ import fi.insomnia.bortal.model.User;
@Local
public interface SessionHandlerBeanLocal {
boolean hasPermission(String target, User user, RolePermission permission);
boolean hasPermission(Permission target, User user, RolePermission permission);
User getDefaultUser(Event event);
......
......@@ -3,7 +3,7 @@
* 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 {
READ, WRITE, EXECUTE
......
......@@ -23,11 +23,15 @@ dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
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=**
jar.compress=false
javac.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
javac.compilerargs=
javac.deprecation=false
......
......@@ -2,32 +2,32 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
<composite:attribute name="target" required="true" />
<composite:facet name="errormessage" />
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
<composite:attribute name="target" required="true" />
<composite:facet name="errormessage" />
</composite:interface>
</composite:interface>
<composite:implementation>
<c:choose>
<c:when test='#{sessionHandler.canRead(target) }'>
<composite:insertChildren />
</c:when>
<c:otherwise>
<c:if test="#{not empty compositeComponent.facets.errormessage}">
<composite:insertFacet name="errormessage" />
</c:if>
</c:otherwise>
<composite:implementation>
<c:choose>
<c:when test='#{sessionHandler.canRead(cc.attrs.target) }'>
<composite:insertChildren />
</c:when>
<c:otherwise>
<c:if test="#{not empty compositeComponent.facets.errormessage}">
<composite:insertFacet name="errormessage" />
</c:if>
</c:otherwise>
</c:choose>
</c:choose>
</composite:implementation>
</composite:implementation>
</html>
\ No newline at end of file
......@@ -18,21 +18,21 @@
<c:choose>
<c:when test="#{not empty cc.attrs.isOneliner}">
<input type="text" name="j_username" />
<input type="password" name="j_password" />
<input type="submit" value="#{i18n['login.submit']}" />
<input type="text" name="j_username" />
<input type="password" name="j_password" />
<input type="submit" value="#{i18n['login.submit']}" />
</c:when>
<c:otherwise>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['login.username']}" />
<input type="text" name="j_username" />
<h:outputText value="#{i18n['login.username']}" />
<input type="text" name="j_username" />
<h:outputText value="#{i18n['login.password']}" />
<input type="password" name="j_password" />
<h:outputText value="#{i18n['login.password']}" />
<input type="password" name="j_password" />
</h:panelGrid>
<input type="submit" value="#{i18n['login.submit']}" />
<input type="submit" value="#{i18n['login.submit']}" />
</c:otherwise>
</c:choose>
......
......@@ -15,7 +15,7 @@
</composite:interface>
<composite:implementation>
<tools:canRead target="login">
<tools:canRead target="LOGIN">
<f:facet name="errorMessage">
<login:logout />
</f:facet>
......
......@@ -13,9 +13,10 @@ import javax.servlet.http.HttpSession;
import fi.insomnia.bortal.HostnameFilter;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.RolePermission;
import fi.insomnia.bortal.beans.SecurityBeanLocal;
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.User;
......@@ -30,10 +31,8 @@ public class SessionHandler {
@EJB
private SessionHandlerBeanLocal handlerbean;
private User user = null;
@EJB
private SecurityBeanLocal secubean;
@EJB
private EventBeanLocal eventbean;
......@@ -75,7 +74,12 @@ public class SessionHandler {
}
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!