|
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>>
|