From: Leif J. <le...@us...> - 2007-02-12 16:55:00
|
User: leifj Date: 07/02/12 08:54:56 Modified: andromda-jsf2/src/main/java/org/andromda/cartridges/jsf2/metafacades JSFUseCaseLogicImpl.java andromda-jsf2/src/main/resources/resources/configuration/facelets andromda.taglib.xml andromda-jsf2/src/main/resources/templates/jsf2/configuration faces-config.xml.vsl andromda-jsf2/src/main/resources/templates/jsf2/utils NavigationItem.java.vsl andromda-jsf2/src/main/uml JSFMetafacadeModel.xml.zip Added: andromda-jsf2/components/src/main/java/org/andromda/cartridges/jsf2/taglib PermissionChecker.java RoleAssociated.java Log: conditionally render navigation-items based on roles - we must fix this for manageable entities too\! Revision Changes Path 1.1 cartridges/andromda-jsf2/components/src/main/java/org/andromda/cartridges/jsf2/taglib/PermissionChecker.java Index: PermissionChecker.java =================================================================== /* * Created on Feb 12, 2007 * */ package org.andromda.cartridges.jsf2.taglib; public class PermissionChecker { public static boolean isUserInItemRoles(RoleAssociated item) { String[] roles = item.getAssociatedRoles(); if (roles == null || roles.length == 0) // no constraints at all return true; javax.faces.context.ExternalContext ctx = javax.faces.context.FacesContext.getCurrentInstance().getExternalContext(); if (ctx.getUserPrincipal() == null) // not logged in return false; for (int i = 0; i < roles.length; i++) { String role = roles[i]; if (ctx.isUserInRole(role)) return true; } return false; } } 1.1 cartridges/andromda-jsf2/components/src/main/java/org/andromda/cartridges/jsf2/taglib/RoleAssociated.java Index: RoleAssociated.java =================================================================== /* * Created on Feb 12, 2007 * */ package org.andromda.cartridges.jsf2.taglib; public interface RoleAssociated { public String[] getAssociatedRoles(); } 1.2 +24 -0 cartridges/andromda-jsf2/src/main/java/org/andromda/cartridges/jsf2/metafacades/JSFUseCaseLogicImpl.java Index: JSFUseCaseLogicImpl.java =================================================================== RCS file: /cvsroot/andromdaplugins/cartridges/andromda-jsf2/src/main/java/org/andromda/cartridges/jsf2/metafacades/JSFUseCaseLogicImpl.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -r1.1 -r1.2 --- JSFUseCaseLogicImpl.java 5 Dec 2006 19:39:09 -0000 1.1 +++ JSFUseCaseLogicImpl.java 12 Feb 2007 16:54:55 -0000 1.2 @@ -28,6 +28,7 @@ import org.apache.commons.collections.Transformer; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; +import org.andromda.metafacades.uml.Role; /** @@ -754,4 +755,27 @@ }); } + /** + * @see org.andromda.cartridges.jsf2.metafacades.JSFUseCase#getActionRoles() + */ + protected String handleGetActionRoles() + { + final Collection users = this.getRoles(); + final StringBuffer rolesBuffer = new StringBuffer(); + boolean first = true; + for (final Iterator userIterator = users.iterator(); userIterator.hasNext();) + { + if (first) + { + first = false; + } + else + { + rolesBuffer.append(','); + } + final Role role = (Role)userIterator.next(); + rolesBuffer.append(role.getName()); + } + return rolesBuffer.toString(); + } } 1.2 +6 -0 cartridges/andromda-jsf2/src/main/resources/resources/configuration/facelets/andromda.taglib.xml Index: andromda.taglib.xml =================================================================== RCS file: /cvsroot/andromdaplugins/cartridges/andromda-jsf2/src/main/resources/resources/configuration/facelets/andromda.taglib.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -r1.1 -r1.2 --- andromda.taglib.xml 5 Dec 2006 19:39:34 -0000 1.1 +++ andromda.taglib.xml 12 Feb 2007 16:54:55 -0000 1.2 @@ -45,4 +45,10 @@ </component> </tag> + <function> + <function-name>isUserInItemRoles</function-name> + <function-class>org.andromda.cartridges.jsf2.taglib.PermissionChecker</function-class> + <function-signature>boolean isUserInItemRoles(org.andromda.cartridges.jsf2.taglib.RoleAssociated)</function-signature> + </function> + </facelet-taglib> 1.6 +8 -0 cartridges/andromda-jsf2/src/main/resources/templates/jsf2/configuration/faces-config.xml.vsl Index: faces-config.xml.vsl =================================================================== RCS file: /cvsroot/andromdaplugins/cartridges/andromda-jsf2/src/main/resources/templates/jsf2/configuration/faces-config.xml.vsl,v retrieving revision 1.5 retrieving revision 1.6 diff -u -w -r1.5 -r1.6 --- faces-config.xml.vsl 1 Feb 2007 19:46:51 -0000 1.5 +++ faces-config.xml.vsl 12 Feb 2007 16:54:55 -0000 1.6 @@ -83,6 +83,14 @@ <property-name>controllerAction</property-name> <value>${useCase.controllerAction}</value> </managed-property> +#set ($roles = $useCase.actionRoles) +#set ($securityEnabled = $stringUtils.isNotBlank($securityRealm) && $stringUtils.isNotBlank($roles) ) +#if ($securityEnabled) + <managed-property> + <property-name>roles</property-name> + <value>$roles</value> + </managed-property> +#end <managed-property> <property-name>outcome</property-name> <value>$useCase.forwardName</value> 1.2 +31 -1 cartridges/andromda-jsf2/src/main/resources/templates/jsf2/utils/NavigationItem.java.vsl Index: NavigationItem.java.vsl =================================================================== RCS file: /cvsroot/andromdaplugins/cartridges/andromda-jsf2/src/main/resources/templates/jsf2/utils/NavigationItem.java.vsl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -r1.1 -r1.2 --- NavigationItem.java.vsl 5 Dec 2006 19:39:21 -0000 1.1 +++ NavigationItem.java.vsl 12 Feb 2007 16:54:56 -0000 1.2 @@ -6,13 +6,14 @@ import java.util.List; import java.lang.StringBuffer; import org.apache.commons.beanutils.MethodUtils; +import javax.servlet.http.HttpServletRequest; /** * * @author Leif Johansson */ public class $className - implements java.io.Serializable + implements java.io.Serializable, org.andromda.cartridges.jsf2.taglib.RoleAssociated { private String label = null; @@ -22,6 +23,8 @@ private List children = null; private Object controllerBean = null; private String controllerAction = null; + private String roles = null; + protected String[] _roles = null; public NavigationItem() {} @@ -65,6 +68,32 @@ this.icon = icon; } + public String getRoles() { + return roles; + } + + private void _updateRoles() { + if (roles != null && roles.length() > 0) + _roles = roles.split(","); + else + _roles = null; + } + + public void setRoles(String roles) { + this.roles = roles; + _updateRoles(); + } + + public String[] getAssociatedRoles() + { + return _roles; + } + + public boolean isRendered() + { + return org.andromda.cartridges.jsf2.taglib.PermissionChecker.isUserInItemRoles(this); + } + public String getAction() { try { return (java.lang.String)MethodUtils.invokeMethod(getControllerBean(),getControllerAction(),null); @@ -96,6 +125,7 @@ buf.append("label=").append(label); buf.append(",outcome=").append(outcome); buf.append(",viewId=").append(viewId); + buf.append(",roles=").append(roles); if (children != null) buf.append(",children=").append(children); buf.append("]"); 1.3 +185 -180 cartridges/andromda-jsf2/src/main/uml/JSFMetafacadeModel.xml.zip <<Binary file>> |