|
Author: adrianc
Date: Tue Jan 5 18:29:22 2010 New Revision: 896161 URL: http://svn.apache.org/viewvc?rev=896161&view=rev Log: Improved security implementation. Converted the Example component to the new security design. Modified: ofbiz/branches/executioncontext20091231/BranchReadMe.txt ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/PermissionsIntersection.java ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/PermissionsUnion.java ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/AccessControllerImpl.java ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/ArtifactPath.java ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/AuthorizationManagerImpl.java ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/PathNode.java ofbiz/branches/executioncontext20091231/framework/example/data/ExampleSecurityData.xml ofbiz/branches/executioncontext20091231/framework/example/servicedef/services.xml ofbiz/branches/executioncontext20091231/framework/example/widget/example/CommonScreens.xml ofbiz/branches/executioncontext20091231/framework/example/widget/example/ExampleScreens.xml ofbiz/branches/executioncontext20091231/framework/security/data/SecurityData.xml ofbiz/branches/executioncontext20091231/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java ofbiz/branches/executioncontext20091231/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java Modified: ofbiz/branches/executioncontext20091231/BranchReadMe.txt URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/BranchReadMe.txt?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/BranchReadMe.txt (original) +++ ofbiz/branches/executioncontext20091231/BranchReadMe.txt Tue Jan 5 18:29:22 2010 @@ -63,3 +63,20 @@ The Authorization Manager is mostly working. Filtering EntityListIterator values is not implemented due to architectural problems. + +--------------------------------------------------- + +2010-05-03: Artifact paths now support substitution ("?") +and wildcard ("*") path elements. +This solves an issue that was discussed during the design - how +to grant access to a particular artifact regardless of the +execution path. You can see examples of their use in +framework/security/data/SecurityData.xml and +framework/example/data/ExampleSecurityData.xml. + +The Example component has been converted to the new +security design. + +The Execution Context seems to fulfill all needs so far, and it +works pretty well, so its API could be considered stable at +this time. Modified: ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/PermissionsIntersection.java URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/PermissionsIntersection.java?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/PermissionsIntersection.java (original) +++ ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/PermissionsIntersection.java Tue Jan 5 18:29:22 2010 @@ -19,6 +19,7 @@ package org.ofbiz.api.authorization; import java.security.Permission; +import java.util.Arrays; import java.util.List; /** @@ -35,6 +36,10 @@ super(listName, permissionsList); } + public PermissionsIntersection(String listName, Permission... permissions) { + super(listName, Arrays.asList(permissions)); + } + /** Returns <code>true</code> if all of the contained permissions * return <code>true</code>. */ Modified: ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/PermissionsUnion.java URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/PermissionsUnion.java?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/PermissionsUnion.java (original) +++ ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/PermissionsUnion.java Tue Jan 5 18:29:22 2010 @@ -19,6 +19,7 @@ package org.ofbiz.api.authorization; import java.security.Permission; +import java.util.Arrays; import java.util.List; /** @@ -35,6 +36,10 @@ super(listName, permissionsList); } + public PermissionsUnion(String listName, Permission... permissions) { + super(listName, Arrays.asList(permissions)); + } + /** Returns <code>true</code> if any of the contained permissions * returns <code>true</code>. */ Modified: ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/AccessControllerImpl.java URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/AccessControllerImpl.java?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/AccessControllerImpl.java (original) +++ ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/AccessControllerImpl.java Tue Jan 5 18:29:22 2010 @@ -51,6 +51,9 @@ this.permission = new OFBizPermission(ThreadContext.getUserLogin().getString("userLoginId")); this.verbose = "true".equals(UtilProperties.getPropertyValue("api.properties", "authorizationManager.verbose")); this.disabled = "true".equals(UtilProperties.getPropertyValue("api.properties", "authorizationManager.disabled")); + if (this.verbose) { + Debug.logInfo("Permissions for " + ThreadContext.getUserLogin().getString("userLoginId") + ": \n" + this.node, module); + } } public void checkPermission(Permission permission) throws AccessControlException { Modified: ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/ArtifactPath.java URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/ArtifactPath.java?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/ArtifactPath.java (original) +++ ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/ArtifactPath.java Tue Jan 5 18:29:22 2010 @@ -18,32 +18,63 @@ *******************************************************************************/ package org.ofbiz.context; -import java.util.Arrays; import java.util.Iterator; +import java.util.NoSuchElementException; /** Artifact path class. */ -public class ArtifactPath { +public class ArtifactPath implements Cloneable, Iterator<String> { + public static final ArtifactPath PATH_ROOT = new ArtifactPath("ofbiz"); public static final String ELEMENT_SEPARATOR = "/"; - protected String currentPathElement = null; - protected Iterator<String> pathIterator; + + protected int currentIndex = 0; + protected final String[] pathElementArray; public ArtifactPath(String artifactPath) { - String[] strArray = artifactPath.split(ELEMENT_SEPARATOR); - this.currentPathElement = strArray[0]; - this.pathIterator = Arrays.asList(strArray).iterator(); + this.pathElementArray = artifactPath.split(ELEMENT_SEPARATOR); + } + + public ArtifactPath(String[] pathElementArray) { + this.pathElementArray = pathElementArray; + } + + @Override + public ArtifactPath clone() { + ArtifactPath newPath = new ArtifactPath(this.pathElementArray); + newPath.currentIndex = this.currentIndex; + return newPath; + } + + public String getCurrentPath() { + StringBuilder sb = new StringBuilder(); + for (int i = this.currentIndex; i < this.pathElementArray.length; i++) { + if (i != this.currentIndex) { + sb.append(ELEMENT_SEPARATOR); + } + sb.append(this.pathElementArray[i]); + } + return sb.toString(); } public String getCurrentPathElement() { - return this.currentPathElement; + return this.pathElementArray[this.currentIndex]; + } + + @Override + public boolean hasNext() { + return this.currentIndex + 1 < this.pathElementArray.length; } - public String getNextPathElement() { - this.currentPathElement = this.pathIterator.next(); - return this.currentPathElement; + @Override + public String next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + return this.pathElementArray[++this.currentIndex]; } - public boolean hasMoreElements() { - return this.pathIterator.hasNext(); + @Override + public void remove() { + throw new UnsupportedOperationException(); } } Modified: ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/AuthorizationManagerImpl.java URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/AuthorizationManagerImpl.java?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/AuthorizationManagerImpl.java (original) +++ ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/AuthorizationManagerImpl.java Tue Jan 5 18:29:22 2010 @@ -139,7 +139,7 @@ try { ThreadContext.runUnprotected(); Delegator delegator = ThreadContext.getDelegator(); - PathNode node = new PathNode(); + PathNode node = PathNode.getInstance(ArtifactPath.PATH_ROOT); // Process group membership permissions first List<GenericValue> groupMemberships = delegator.findList("UserToUserGroupRel", EntityCondition.makeCondition(UtilMisc.toMap("userLoginId", userLoginId)), null, null, null, false); for (GenericValue userGroup : groupMemberships) { Modified: ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/PathNode.java URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/PathNode.java?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/PathNode.java (original) +++ ofbiz/branches/executioncontext20091231/framework/context/src/org/ofbiz/context/PathNode.java Tue Jan 5 18:29:22 2010 @@ -24,89 +24,66 @@ import javolution.util.FastList; import javolution.util.FastMap; -/** Implements a node in a permissions tree. +/** A node in a permissions tree. */ -public class PathNode { +public abstract class PathNode { - public static final String PLACEHOLDER_CHARACTER = "?"; - protected String nodeName = null; - protected OFBizPermission permission = null; - protected Map<String, PathNode> childNodes = null; - protected boolean handlePlaceholder = false; + public static final String SUBSTITUTION_CHARACTER = "?"; + public static final String WILDCARD_CHARACTER = "*"; + + public static PathNode getInstance(ArtifactPath artifactPath) { + String currentPathElement = artifactPath.getCurrentPathElement().intern(); + if (SUBSTITUTION_CHARACTER.equals(currentPathElement)) { + return new SubstitutionNode(); + } + if (WILDCARD_CHARACTER.equals(currentPathElement)) { + return new WildCardNode(); + } + return new BranchNode(currentPathElement); + } - public PathNode() {} + protected Map<String, PathNode> childNodes = null; + protected String nodeName = null; protected PathNode(String nodeName) { this.nodeName = nodeName; } protected void buildNodeString(FastList<PathNode> currentPath, StringBuilder result) { - currentPath.add(this); - if (this.permission != null) { - for (PathNode pathNode: currentPath) { - result.append("/"); - result.append(pathNode.nodeName); - } - result.append("["); - result.append(this.permission); - result.append("]"); - result.append("\n"); - } if (this.childNodes != null) { Collection<PathNode> childNodes = this.childNodes.values(); for (PathNode childNode : childNodes) { childNode.buildNodeString(currentPath, result); } } - currentPath.removeLast(); } - public void getPermissions(ArtifactPath artifactPath, OFBizPermission permission) { - permission.accumulatePermissions(this.permission); - if (artifactPath.hasMoreElements() && this.childNodes != null) { - String nextNodeName = artifactPath.getNextPathElement(); - if (this.handlePlaceholder) { - if (!artifactPath.hasMoreElements()) { - return; - } - nextNodeName = artifactPath.getNextPathElement(); - } - PathNode node = this.childNodes.get(nextNodeName.toUpperCase()); + protected void getChildNodePermissions(String key, ArtifactPath artifactPath, OFBizPermission permission) { + if (this.childNodes != null) { + PathNode node = this.childNodes.get(key.toUpperCase()); if (node != null) { node.getPermissions(artifactPath, permission); } } } - public void setPermissions(ArtifactPath artifactPath, OFBizPermission permission) { - if (this.nodeName == null) { - this.nodeName = artifactPath.getCurrentPathElement(); - } - if (!artifactPath.hasMoreElements()) { - if (this.permission == null) { - this.permission = permission; - } else { - this.permission.accumulatePermissions(permission); - } - return; - } - String nextNodeName = artifactPath.getNextPathElement(); - if (PLACEHOLDER_CHARACTER.equals(nextNodeName)) { - this.handlePlaceholder = true; - nextNodeName = artifactPath.getNextPathElement(); - } - String key = nextNodeName.toUpperCase(); + public abstract void getPermissions(ArtifactPath artifactPath, OFBizPermission permission); + + protected void setChildNodePermissions(String key, ArtifactPath artifactPath, OFBizPermission permission) { if (this.childNodes == null) { this.childNodes = FastMap.newInstance(); } + key = key.toUpperCase(); PathNode node = this.childNodes.get(key); if (node == null) { - node = new PathNode(nextNodeName); + node = PathNode.getInstance(artifactPath); this.childNodes.put(key, node); } node.setPermissions(artifactPath, permission); } + public abstract void setPermissions(ArtifactPath artifactPath, OFBizPermission permission); + @Override public String toString() { FastList<PathNode> currentPath = FastList.newInstance(); @@ -114,4 +91,143 @@ buildNodeString(currentPath, result); return result.toString(); } + + protected static class BranchNode extends PathNode { + protected OFBizPermission permission = null; + protected SubstitutionNode substitutionNode = null; + protected WildCardNode wildCardNode = null; + + protected BranchNode(String nodeName) { + super(nodeName); + } + + @Override + protected void buildNodeString(FastList<PathNode> currentPath, StringBuilder result) { + currentPath.add(this); + if (this.permission != null) { + for (PathNode pathNode: currentPath) { + result.append("/"); + result.append(pathNode.nodeName); + } + result.append("["); + result.append(this.permission); + result.append("]"); + result.append("\n"); + } + if (this.substitutionNode != null) { + this.substitutionNode.buildNodeString(currentPath, result); + } + if (this.wildCardNode != null) { + this.wildCardNode.buildNodeString(currentPath, result); + } + super.buildNodeString(currentPath, result); + currentPath.removeLast(); + } + + @Override + public void getPermissions(ArtifactPath artifactPath, OFBizPermission permission) { + permission.accumulatePermissions(this.permission); + if (artifactPath.hasNext()) { + String key = artifactPath.next(); + if (this.substitutionNode != null) { + this.substitutionNode.getPermissions(artifactPath.clone(), permission); + } + if (this.wildCardNode != null) { + this.wildCardNode.getPermissions(artifactPath.clone(), permission); + } + this.getChildNodePermissions(key, artifactPath, permission); + } + } + + @Override + public void setPermissions(ArtifactPath artifactPath, OFBizPermission permission) { + if (!artifactPath.hasNext()) { + if (this.permission == null) { + this.permission = permission; + } else { + this.permission.accumulatePermissions(permission); + } + return; + } + String key = artifactPath.next(); + if (SUBSTITUTION_CHARACTER.equals(key)) { + if (this.substitutionNode == null) { + this.substitutionNode = new SubstitutionNode(); + } + this.substitutionNode.setPermissions(artifactPath, permission); + return; + } + if (WILDCARD_CHARACTER.equals(key)) { + if (this.wildCardNode == null) { + this.wildCardNode = new WildCardNode(); + } + this.wildCardNode.setPermissions(artifactPath, permission); + return; + } + this.setChildNodePermissions(key, artifactPath, permission); + } + } + + protected static class SubstitutionNode extends PathNode { + + protected SubstitutionNode() { + super(SUBSTITUTION_CHARACTER); + } + + @Override + protected void buildNodeString(FastList<PathNode> currentPath, StringBuilder result) { + currentPath.add(this); + super.buildNodeString(currentPath, result); + currentPath.removeLast(); + } + + @Override + public void getPermissions(ArtifactPath artifactPath, OFBizPermission permission) { + if (artifactPath.hasNext()) { + this.getChildNodePermissions(artifactPath.next(), artifactPath, permission); + } + } + + @Override + public void setPermissions(ArtifactPath artifactPath, OFBizPermission permission) { + if (artifactPath.hasNext()) { + this.setChildNodePermissions(artifactPath.next(), artifactPath, permission); + } + } + } + + protected static class WildCardNode extends PathNode { + + protected WildCardNode() { + super(WILDCARD_CHARACTER); + } + + @Override + protected void buildNodeString(FastList<PathNode> currentPath, StringBuilder result) { + currentPath.add(this); + super.buildNodeString(currentPath, result); + currentPath.removeLast(); + } + + public void getPermissions(ArtifactPath artifactPath, OFBizPermission permission) { + if (artifactPath.hasNext() && this.childNodes != null) { + artifactPath.next(); + String currentPath = artifactPath.getCurrentPath().toUpperCase(); + for (Map.Entry<String, PathNode> entry : this.childNodes.entrySet()) { + if (currentPath.endsWith(entry.getKey())) { + entry.getValue().getPermissions(artifactPath, permission); + return; + } + } + } + } + + @Override + public void setPermissions(ArtifactPath artifactPath, OFBizPermission permission) { + if (artifactPath.hasNext()) { + artifactPath.next(); + this.setChildNodePermissions(artifactPath.getCurrentPath(), artifactPath, permission); + } + } + } } Modified: ofbiz/branches/executioncontext20091231/framework/example/data/ExampleSecurityData.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/example/data/ExampleSecurityData.xml?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/example/data/ExampleSecurityData.xml (original) +++ ofbiz/branches/executioncontext20091231/framework/example/data/ExampleSecurityData.xml Tue Jan 5 18:29:22 2010 @@ -19,27 +19,16 @@ --> <entity-engine-xml> <!-- Example security --> - <SecurityPermission description="View operations in the Example Management Screens." permissionId="EXAMPLE_VIEW"/> - <SecurityPermission description="Create operations in the Example Management Screens." permissionId="EXAMPLE_CREATE"/> - <SecurityPermission description="Update operations in the Example Management Screens." permissionId="EXAMPLE_UPDATE"/> - <SecurityPermission description="Delete operations in the Example Management Screens." permissionId="EXAMPLE_DELETE"/> - <SecurityPermission description="ALL operations in the Example Management Screens." permissionId="EXAMPLE_ADMIN"/> - <SecurityGroupPermission groupId="FULLADMIN" permissionId="EXAMPLE_ADMIN"/> - <SecurityGroupPermission groupId="FLEXADMIN" permissionId="EXAMPLE_CREATE"/> - <SecurityGroupPermission groupId="FLEXADMIN" permissionId="EXAMPLE_DELETE"/> - <SecurityGroupPermission groupId="FLEXADMIN" permissionId="EXAMPLE_UPDATE"/> - <SecurityGroupPermission groupId="FLEXADMIN" permissionId="EXAMPLE_VIEW"/> - <SecurityGroupPermission groupId="VIEWADMIN" permissionId="EXAMPLE_VIEW"/> - <SecurityGroupPermission groupId="BIZADMIN" permissionId="EXAMPLE_ADMIN"/> - <ArtifactPath artifactPath="ofbiz/example" description="Example Application"/> <ArtifactPath artifactPath="ofbiz/exampleext" description="Extended Example Application"/> - <!-- Data needed for the transition to security-aware artifacts. As each webapp - is converted over to the new security design, the corresponding admin - permission should be removed. --> - -<!-- <UserGrpToArtifactPermRel groupId="OFBIZ_USERS" artifactPath="ofbiz/example" permissionValue="admin=true"/> --> - <UserGrpToArtifactPermRel groupId="OFBIZ_USERS" artifactPath="ofbiz/exampleext" permissionValue="admin=true"/> + <!-- Data needed to demonstrate the security-aware artifacts. This is temporary - + it will not be included in the project. --> + <UserToArtifactPermRel userLoginId="artifact-user" artifactPath="ofbiz/example" permissionValue="access=true"/> + <UserToArtifactPermRel userLoginId="artifact-user" artifactPath="ofbiz/example" permissionValue="view=true"/> + <UserToArtifactPermRel userLoginId="artifact-user" artifactPath="ofbiz/example" permissionValue="create=true"/> + <UserToArtifactPermRel userLoginId="artifact-user" artifactPath="ofbiz/example" permissionValue="update=true"/> + <ArtifactPath artifactPath="ofbiz/example/*/anotherDate" description="Example Application - 'anotherDate' field"/> + <UserToArtifactPermRel userLoginId="artifact-user" artifactPath="ofbiz/example/*/anotherDate" permissionValue="view=false"/> </entity-engine-xml> Modified: ofbiz/branches/executioncontext20091231/framework/example/servicedef/services.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/example/servicedef/services.xml?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/example/servicedef/services.xml (original) +++ ofbiz/branches/executioncontext20091231/framework/example/servicedef/services.xml Tue Jan 5 18:29:22 2010 @@ -27,7 +27,6 @@ <!-- Example & Related Services --> <service name="createExample" default-entity-name="Example" engine="entity-auto" invoke="create" auth="true"> <description>Create a Example</description> - <permission-service service-name="exampleGenericPermission" main-action="CREATE"/> <auto-attributes include="pk" mode="OUT" optional="false"/> <auto-attributes include="nonpk" mode="IN" optional="true"/> <override name="exampleTypeId" optional="false"/> @@ -36,20 +35,17 @@ </service> <service name="updateExample" default-entity-name="Example" engine="entity-auto" invoke="update" auth="true"> <description>Update a Example</description> - <permission-service service-name="exampleGenericPermission" main-action="UPDATE"/> <auto-attributes include="pk" mode="IN" optional="false"/> <auto-attributes include="nonpk" mode="IN" optional="true"/> <attribute name="oldStatusId" type="String" mode="OUT" optional="false"/> </service> <service name="deleteExample" default-entity-name="Example" engine="entity-auto" invoke="delete" auth="true"> <description>Delete a Example</description> - <permission-service service-name="exampleGenericPermission" main-action="DELETE"/> <auto-attributes include="pk" mode="IN" optional="false"/> </service> <service name="createExampleStatus" default-entity-name="ExampleStatus" engine="simple" location="component://example/script/org/ofbiz/example/example/ExampleServices.xml" invoke="createExampleStatus" auth="true"> <description>Create a ExampleStatus</description> - <permission-service service-name="exampleGenericPermission" main-action="CREATE"/> <auto-attributes include="all" mode="IN" optional="false"> <exclude field-name="statusDate"/> <exclude field-name="statusEndDate"/> @@ -58,7 +54,6 @@ <service name="createExampleItem" default-entity-name="ExampleItem" engine="entity-auto" invoke="create" auth="true"> <description>Create a ExampleItem</description> - <permission-service service-name="exampleGenericPermission" main-action="CREATE"/> <auto-attributes include="pk" mode="IN" optional="false"/> <auto-attributes include="nonpk" mode="IN" optional="true"/> <override name="exampleItemSeqId" mode="OUT"/> <!-- make this OUT rather than IN, we will automatically generate the next sub-sequence ID --> @@ -66,61 +61,47 @@ </service> <service name="updateExampleItem" default-entity-name="ExampleItem" engine="entity-auto" invoke="update" auth="true"> <description>Update a ExampleItem</description> - <permission-service service-name="exampleGenericPermission" main-action="UPDATE"/> <auto-attributes include="pk" mode="IN" optional="false"/> <auto-attributes include="nonpk" mode="IN" optional="true"/> </service> <service name="deleteExampleItem" default-entity-name="ExampleItem" engine="entity-auto" invoke="delete" auth="true"> <description>Delete a ExampleItem</description> - <permission-service service-name="exampleGenericPermission" main-action="DELETE"/> <auto-attributes include="pk" mode="IN" optional="false"/> </service> <!-- ExampleFeature Services --> <service name="createExampleFeature" default-entity-name="ExampleFeature" engine="entity-auto" invoke="create" auth="true"> <description>Create a ExampleFeature</description> - <permission-service service-name="exampleGenericPermission" main-action="CREATE"/> <auto-attributes include="pk" mode="OUT" optional="false"/> <auto-attributes include="nonpk" mode="IN" optional="true"/> <override name="description" optional="false"/> </service> <service name="updateExampleFeature" default-entity-name="ExampleFeature" engine="entity-auto" invoke="update" auth="true"> <description>Update a ExampleFeature</description> - <permission-service service-name="exampleGenericPermission" main-action="UPDATE"/> <auto-attributes include="pk" mode="IN" optional="false"/> <auto-attributes include="nonpk" mode="IN" optional="true"/> </service> <service name="deleteExampleFeature" default-entity-name="ExampleFeature" engine="entity-auto" invoke="delete" auth="true"> <description>Delete a ExampleFeature</description> - <permission-service service-name="exampleGenericPermission" main-action="DELETE"/> <auto-attributes include="pk" mode="IN" optional="false"/> </service> <service name="createExampleFeatureAppl" default-entity-name="ExampleFeatureAppl" engine="entity-auto" invoke="create" auth="true"> <description>Create a ExampleFeatureAppl</description> - <permission-service service-name="exampleGenericPermission" main-action="CREATE"/> <auto-attributes include="pk" mode="IN" optional="false"/> <auto-attributes include="nonpk" mode="IN" optional="true"/> <override name="fromDate" optional="true"/> </service> <service name="updateExampleFeatureAppl" default-entity-name="ExampleFeatureAppl" engine="entity-auto" invoke="update" auth="true"> <description>Update a ExampleFeatureAppl</description> - <permission-service service-name="exampleGenericPermission" main-action="UPDATE"/> <auto-attributes include="pk" mode="IN" optional="false"/> <auto-attributes include="nonpk" mode="IN" optional="true"/> </service> <service name="deleteExampleFeatureAppl" default-entity-name="ExampleFeatureAppl" engine="entity-auto" invoke="delete" auth="true"> <description>Delete a ExampleFeatureAppl</description> - <permission-service service-name="exampleGenericPermission" main-action="DELETE"/> <auto-attributes include="pk" mode="IN" optional="false"/> </service> - <!-- Permission Services --> - <service name="exampleGenericPermission" engine="simple" - location="component://example/script/org/ofbiz/example/ExamplePermissionServices.xml" invoke="exampleGenericPermission"> - <implements service="permissionInterface"/> - </service> - <!-- Example ServiceTest Service --> <service name="testCreateExampleService" engine="simple" location="component://example/script/org/ofbiz/example/example/ExampleServices.xml" invoke="testCreateExampleService"> Modified: ofbiz/branches/executioncontext20091231/framework/example/widget/example/CommonScreens.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/example/widget/example/CommonScreens.xml?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/example/widget/example/CommonScreens.xml (original) +++ ofbiz/branches/executioncontext20091231/framework/example/widget/example/CommonScreens.xml Tue Jan 5 18:29:22 2010 @@ -82,10 +82,7 @@ <decorator-section name="pre-body"> <section> <condition> - <and> - <if-has-permission permission="EXAMPLE" action="_VIEW"/> - <not><if-empty field="example"/></not> - </and> + <not><if-empty field="example"/></not> </condition> <widgets> <include-menu name="EditExample" location="component://example/widget/example/ExampleMenus.xml"/> @@ -94,10 +91,6 @@ </decorator-section> <decorator-section name="body"> <section> - <!-- do check for EXAMPLE, _VIEW permission --> - <condition> - <if-has-permission permission="EXAMPLE" action="_VIEW"/> - </condition> <widgets> <section> <condition> @@ -124,9 +117,6 @@ </section> <decorator-section-include name="body"/> </widgets> - <fail-widgets> - <label style="h3">${uiLabelMap.ExampleViewPermissionError}</label> - </fail-widgets> </section> </decorator-section> </decorator-screen> @@ -146,10 +136,7 @@ <decorator-section name="pre-body"> <section> <condition> - <and> - <if-has-permission permission="EXAMPLE" action="_VIEW"/> - <not><if-empty field="exampleFeature"/></not> - </and> + <not><if-empty field="exampleFeature"/></not> </condition> <widgets> <include-menu name="EditExampleFeature" location="component://example/widget/example/ExampleMenus.xml"/> @@ -158,10 +145,6 @@ </decorator-section> <decorator-section name="body"> <section> - <!-- do check for EXAMPLE, _VIEW permission --> - <condition> - <if-has-permission permission="EXAMPLE" action="_VIEW"/> - </condition> <widgets> <section> <condition> @@ -181,9 +164,6 @@ </section> <decorator-section-include name="body"/> </widgets> - <fail-widgets> - <label style="h3">${uiLabelMap.ExampleViewPermissionError}</label> - </fail-widgets> </section> </decorator-section> </decorator-screen> Modified: ofbiz/branches/executioncontext20091231/framework/example/widget/example/ExampleScreens.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/example/widget/example/ExampleScreens.xml?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/example/widget/example/ExampleScreens.xml (original) +++ ofbiz/branches/executioncontext20091231/framework/example/widget/example/ExampleScreens.xml Tue Jan 5 18:29:22 2010 @@ -31,11 +31,6 @@ <widgets> <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}"> <decorator-section name="body"> - <section> - <condition> - <if-has-permission permission="EXAMPLE" action="_VIEW"/> - </condition> - <widgets> <decorator-screen name="FindScreenDecorator" location="component://common/widget/CommonScreens.xml"> <decorator-section name="menu-bar"> <container style="button-bar"><link target="EditExample" text="${uiLabelMap.ExampleNewExample}" style="buttontext"/></container> @@ -47,11 +42,6 @@ <include-form name="ListExamples" location="component://example/widget/example/ExampleForms.xml"/> </decorator-section> </decorator-screen> - </widgets> - <fail-widgets> - <label style="h3">${uiLabelMap.ExampleViewPermissionError}</label> - </fail-widgets> - </section> </decorator-section> </decorator-screen> </widgets> Modified: ofbiz/branches/executioncontext20091231/framework/security/data/SecurityData.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/security/data/SecurityData.xml?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/security/data/SecurityData.xml (original) +++ ofbiz/branches/executioncontext20091231/framework/security/data/SecurityData.xml Tue Jan 5 18:29:22 2010 @@ -85,4 +85,8 @@ <UserToArtifactPermRel userLoginId="NOT_LOGGED_IN" artifactPath="ofbiz/?/login" permissionValue="view=true"/> <UserToArtifactPermRel userLoginId="NOT_LOGGED_IN" artifactPath="ofbiz/?/ServerHit" permissionValue="create=true"/> + <!-- Data needed to demonstrate the security-aware artifacts. This is temporary - + it will not be included in the project. --> + <UserLogin userLoginId="artifact-user" enabled="Y" isSystem="N" currentPassword="{SHA}47ca69ebb4bdc9ae0adec130880165d2cc05db1a" passwordHint=""/> + </entity-engine-xml> Modified: ofbiz/branches/executioncontext20091231/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java (original) +++ ofbiz/branches/executioncontext20091231/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java Tue Jan 5 18:29:22 2010 @@ -21,6 +21,7 @@ import static org.ofbiz.base.util.UtilGenerics.checkMap; import java.math.BigInteger; +import java.security.AccessControlException; import java.security.cert.X509Certificate; import java.util.List; import java.util.Map; @@ -38,6 +39,7 @@ import javolution.util.FastList; import javolution.util.FastMap; +import static org.ofbiz.api.authorization.BasicPermissions.Access; import org.ofbiz.base.component.ComponentConfig; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.GeneralException; @@ -853,6 +855,10 @@ } protected static boolean hasBasePermission(GenericValue userLogin, HttpServletRequest request) { + try { + ThreadContext.getAccessController().checkPermission(Access); + return true; + } catch (AccessControlException e) {} ServletContext context = (ServletContext) request.getAttribute("servletContext"); Authorization authz = (Authorization) request.getAttribute("authz"); Security security = (Security) request.getAttribute("security"); Modified: ofbiz/branches/executioncontext20091231/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java?rev=896161&r1=896160&r2=896161&view=diff ============================================================================== --- ofbiz/branches/executioncontext20091231/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java (original) +++ ofbiz/branches/executioncontext20091231/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java Tue Jan 5 18:29:22 2010 @@ -33,6 +33,7 @@ import javolution.util.FastList; import javolution.util.FastMap; +import static org.ofbiz.api.authorization.BasicPermissions.View; import org.ofbiz.api.context.ExecutionArtifact; import org.ofbiz.base.util.BshUtil; import org.ofbiz.base.util.Debug; @@ -595,8 +596,12 @@ public void renderFieldString(Appendable writer, Map<String, Object> context, FormStringRenderer formStringRenderer) throws IOException { try { + // Permissions should be checked by renderers, this is here + // for demonstration only ThreadContext.pushExecutionArtifact(this); + ThreadContext.getAccessController().checkPermission(View); this.fieldInfo.renderFieldString(writer, context, formStringRenderer); + } catch (Exception e) { } finally { ThreadContext.popExecutionArtifact(); } |
| Free forum by Nabble | Edit this page |
