Fix for ETHREEOH-1926 - it is now possible for Consumer users to execute a Copy based Simple Workflow

- use of RunAs to execute the removal of the simpleworkflow aspect which was the only reason Consumer users could not perform the action

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@14935 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2009-06-25 18:58:47 +00:00
parent 4f6da1d1bb
commit f0c0cafa7c
2 changed files with 25 additions and 13 deletions

View File

@@ -308,11 +308,10 @@
</params> </params>
</action> </action>
<!-- 'Approve' workflow step for document --> <!-- 'Approve' workflow step for document -->
<action id="approve_doc"> <action id="approve_doc">
<permissions> <permissions>
<permission allow="true">WriteProperties</permission> <permission allow="true">Read</permission>
</permissions> </permissions>
<evaluator>org.alfresco.web.action.evaluator.ApproveDocEvaluator</evaluator> <evaluator>org.alfresco.web.action.evaluator.ApproveDocEvaluator</evaluator>
<label>#{actionContext["app:approveStep"]}</label> <label>#{actionContext["app:approveStep"]}</label>
@@ -327,7 +326,7 @@
<!-- 'Reject' workflow step for document --> <!-- 'Reject' workflow step for document -->
<action id="reject_doc"> <action id="reject_doc">
<permissions> <permissions>
<permission allow="true">WriteProperties</permission> <permission allow="true">Read</permission>
</permissions> </permissions>
<evaluator>org.alfresco.web.action.evaluator.RejectDocEvaluator</evaluator> <evaluator>org.alfresco.web.action.evaluator.RejectDocEvaluator</evaluator>
<label>#{actionContext["app:rejectStep"]}</label> <label>#{actionContext["app:rejectStep"]}</label>
@@ -342,7 +341,7 @@
<!-- 'Approve' workflow step for document details page --> <!-- 'Approve' workflow step for document details page -->
<action id="approve_doc_details"> <action id="approve_doc_details">
<permissions> <permissions>
<permission allow="true">WriteProperties</permission> <permission allow="true">Read</permission>
</permissions> </permissions>
<evaluator>org.alfresco.web.action.evaluator.ApproveDocEvaluator</evaluator> <evaluator>org.alfresco.web.action.evaluator.ApproveDocEvaluator</evaluator>
<label>#{actionContext.properties["app:approveStep"]}</label> <label>#{actionContext.properties["app:approveStep"]}</label>
@@ -357,7 +356,7 @@
<!-- 'Reject' workflow step for document details page--> <!-- 'Reject' workflow step for document details page-->
<action id="reject_doc_details"> <action id="reject_doc_details">
<permissions> <permissions>
<permission allow="true">WriteProperties</permission> <permission allow="true">Read</permission>
</permissions> </permissions>
<evaluator>org.alfresco.web.action.evaluator.RejectDocEvaluator</evaluator> <evaluator>org.alfresco.web.action.evaluator.RejectDocEvaluator</evaluator>
<label>#{actionContext.properties["app:rejectStep"]}</label> <label>#{actionContext.properties["app:rejectStep"]}</label>
@@ -372,7 +371,7 @@
<!-- 'Approve' workflow step for space --> <!-- 'Approve' workflow step for space -->
<action id="approve_space"> <action id="approve_space">
<permissions> <permissions>
<permission allow="true">WriteProperties</permission> <permission allow="true">Read</permission>
</permissions> </permissions>
<evaluator>org.alfresco.web.action.evaluator.ApproveDocEvaluator</evaluator> <evaluator>org.alfresco.web.action.evaluator.ApproveDocEvaluator</evaluator>
<label>#{actionContext["app:approveStep"]}</label> <label>#{actionContext["app:approveStep"]}</label>
@@ -387,7 +386,7 @@
<!-- 'Reject' workflow step for space --> <!-- 'Reject' workflow step for space -->
<action id="reject_space"> <action id="reject_space">
<permissions> <permissions>
<permission allow="true">WriteProperties</permission> <permission allow="true">Read</permission>
</permissions> </permissions>
<evaluator>org.alfresco.web.action.evaluator.RejectDocEvaluator</evaluator> <evaluator>org.alfresco.web.action.evaluator.RejectDocEvaluator</evaluator>
<label>#{actionContext["app:rejectStep"]}</label> <label>#{actionContext["app:rejectStep"]}</label>
@@ -402,7 +401,7 @@
<!-- 'Approve' workflow step for space details page --> <!-- 'Approve' workflow step for space details page -->
<action id="approve_space_details"> <action id="approve_space_details">
<permissions> <permissions>
<permission allow="true">WriteProperties</permission> <permission allow="true">Read</permission>
</permissions> </permissions>
<evaluator>org.alfresco.web.action.evaluator.ApproveDocEvaluator</evaluator> <evaluator>org.alfresco.web.action.evaluator.ApproveDocEvaluator</evaluator>
<label>#{actionContext.properties["app:approveStep"]}</label> <label>#{actionContext.properties["app:approveStep"]}</label>
@@ -417,7 +416,7 @@
<!-- 'Reject' workflow step for space details page--> <!-- 'Reject' workflow step for space details page-->
<action id="reject_space_details"> <action id="reject_space_details">
<permissions> <permissions>
<permission allow="true">WriteProperties</permission> <permission allow="true">Read</permission>
</permissions> </permissions>
<evaluator>org.alfresco.web.action.evaluator.RejectDocEvaluator</evaluator> <evaluator>org.alfresco.web.action.evaluator.RejectDocEvaluator</evaluator>
<label>#{actionContext.properties["app:rejectStep"]}</label> <label>#{actionContext.properties["app:rejectStep"]}</label>

View File

@@ -33,6 +33,8 @@ import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ApplicationModel; import org.alfresco.model.ApplicationModel;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.site.SiteServiceException;
import org.alfresco.service.cmr.repository.AssociationRef; import org.alfresco.service.cmr.repository.AssociationRef;
import org.alfresco.service.cmr.repository.CopyService; import org.alfresco.service.cmr.repository.CopyService;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
@@ -64,7 +66,7 @@ public class WorkflowUtil
* *
* @throws AlfrescoRuntimeException * @throws AlfrescoRuntimeException
*/ */
public static void approve(NodeRef ref, NodeService nodeService, CopyService copyService) public static void approve(final NodeRef ref, final NodeService nodeService, final CopyService copyService)
throws AlfrescoRuntimeException throws AlfrescoRuntimeException
{ {
Node docNode = new Node(ref); Node docNode = new Node(ref);
@@ -80,11 +82,11 @@ public class WorkflowUtil
Boolean approveMove = (Boolean)props.get(ApplicationModel.PROP_APPROVE_MOVE.toString()); Boolean approveMove = (Boolean)props.get(ApplicationModel.PROP_APPROVE_MOVE.toString());
NodeRef approveFolder = (NodeRef)props.get(ApplicationModel.PROP_APPROVE_FOLDER.toString()); NodeRef approveFolder = (NodeRef)props.get(ApplicationModel.PROP_APPROVE_FOLDER.toString());
// first we need to take off the simpleworkflow aspect
nodeService.removeAspect(ref, ApplicationModel.ASPECT_SIMPLE_WORKFLOW);
if (approveMove.booleanValue()) if (approveMove.booleanValue())
{ {
// first we need to take off the simpleworkflow aspect
nodeService.removeAspect(ref, ApplicationModel.ASPECT_SIMPLE_WORKFLOW);
// move the node to the specified folder // move the node to the specified folder
String qname = QName.createValidLocalName(docNode.getName()); String qname = QName.createValidLocalName(docNode.getName());
nodeService.moveNode(ref, approveFolder, ContentModel.ASSOC_CONTAINS, nodeService.moveNode(ref, approveFolder, ContentModel.ASSOC_CONTAINS,
@@ -92,6 +94,17 @@ public class WorkflowUtil
} }
else else
{ {
// first we need to take off the simpleworkflow aspect
// NOTE: run as system to allow Consumers to copy an item
AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Object>()
{
public String doWork() throws Exception
{
nodeService.removeAspect(ref, ApplicationModel.ASPECT_SIMPLE_WORKFLOW);
return null;
}
}, AuthenticationUtil.getSystemUserName());
// copy the node to the specified folder // copy the node to the specified folder
String name = docNode.getName(); String name = docNode.getName();
String qname = QName.createValidLocalName(name); String qname = QName.createValidLocalName(name);