From 2648cf3f6924dff51ea25c013df620b2e763503a Mon Sep 17 00:00:00 2001 From: Jamal Kaabi-Mofrad Date: Thu, 2 Jun 2016 22:19:36 +0000 Subject: [PATCH] Merged API-STRIKES-BACK (5.2.0) to HEAD (5.2) 127342 jvonka: Node Associations - peer assoc permissions - alt impl using temp wrapper instead of full override RA-1062 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@127602 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/public-rest-context.xml | 76 ++++------------ .../rest/api/nodes/AbstractNodeRelation.java | 7 +- .../rest/api/nodes/NodeAssocService.java | 56 ++++++++++++ .../rest/api/nodes/NodeAssocServiceImpl.java | 86 +++++++++++++++++++ .../rest/api/nodes/NodeSourcesRelation.java | 2 +- .../rest/api/nodes/NodeTargetsRelation.java | 8 +- 6 files changed, 169 insertions(+), 66 deletions(-) create mode 100644 source/java/org/alfresco/rest/api/nodes/NodeAssocService.java create mode 100644 source/java/org/alfresco/rest/api/nodes/NodeAssocServiceImpl.java diff --git a/config/alfresco/public-rest-context.xml b/config/alfresco/public-rest-context.xml index cfb4536abc..bd97c0a7a2 100644 --- a/config/alfresco/public-rest-context.xml +++ b/config/alfresco/public-rest-context.xml @@ -786,7 +786,7 @@ - + @@ -1199,87 +1199,47 @@ - + - org.alfresco.service.cmr.repository.NodeService + org.alfresco.rest.api.nodes.NodeAssocService - + - + - - - + - org.alfresco.service.cmr.repository.NodeService.getStores=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.createStore=ACL_METHOD.ROLE_ADMINISTRATOR - org.alfresco.service.cmr.repository.NodeService.exists=ACL_ALLOW - org.alfresco.service.cmr.repository.NodeService.getNodeStatus=ACL_NODE.0.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getNodeRef=AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getAllRootNodes=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getRootNode=ACL_NODE.0.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.createNode=ACL_NODE.0.sys:base.CreateChildren - org.alfresco.service.cmr.repository.NodeService.moveNode=ACL_NODE.0.sys:base.DeleteNode,ACL_NODE.1.sys:base.CreateChildren - org.alfresco.service.cmr.repository.NodeService.setChildAssociationIndex=ACL_PARENT.0.sys:base.WriteProperties - org.alfresco.service.cmr.repository.NodeService.getType=ACL_ALLOW - org.alfresco.service.cmr.repository.NodeService.setType=ACL_NODE.0.sys:base.WriteProperties - org.alfresco.service.cmr.repository.NodeService.addAspect=ACL_NODE.0.sys:base.WriteProperties,ACL_ITEM.0.cm:ownable.TakeOwnership - org.alfresco.service.cmr.repository.NodeService.removeAspect=ACL_NODE.0.sys:base.WriteProperties - org.alfresco.service.cmr.repository.NodeService.hasAspect=ACL_NODE.0.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getAspects=ACL_NODE.0.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.deleteNode=ACL_NODE.0.sys:base.DeleteNode - org.alfresco.service.cmr.repository.NodeService.addChild=ACL_NODE.0.sys:base.CreateChildren,ACL_NODE.1.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.removeChild=ACL_NODE.0.sys:base.DeleteChildren,ACL_PRI_CHILD_ASSOC_ON_CHILD.0.1.sys:base.DeleteNode - org.alfresco.service.cmr.repository.NodeService.removeChildAssociation=ACL_PARENT.0.sys:base.DeleteChildren,ACL_PRI_CHILD_ASSOC_ON_CHILD.0.sys:base.DeleteNode - org.alfresco.service.cmr.repository.NodeService.removeSeconaryChildAssociation=ACL_PARENT.0.sys:base.DeleteChildren - org.alfresco.service.cmr.repository.NodeService.removeSecondaryChildAssociation=ACL_PARENT.0.sys:base.DeleteChildren - org.alfresco.service.cmr.repository.NodeService.getProperties=ACL_NODE.0.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getProperty=ACL_NODE.0.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.setProperties=ACL_NODE.0.sys:base.WriteProperties,ACL_ITEM.0.cm:ownable.TakeOwnership - org.alfresco.service.cmr.repository.NodeService.addProperties=ACL_NODE.0.sys:base.WriteProperties,ACL_ITEM.0.cm:ownable.TakeOwnership - org.alfresco.service.cmr.repository.NodeService.setProperty=ACL_NODE.0.sys:base.WriteProperties,ACL_ITEM.0.cm:ownable.TakeOwnership - org.alfresco.service.cmr.repository.NodeService.removeProperty=ACL_NODE.0.sys:base.WriteProperties - org.alfresco.service.cmr.repository.NodeService.getParentAssocs=ACL_NODE.0.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getChildAssocs=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getChildByName=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getChildAssocsByPropertyValue=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getChildrenByName=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getPrimaryParent=ACL_NODE.0.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.createAssociation=ACL_NODE.0.sys:base.WriteProperties,ACL_NODE.1.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.removeAssociation=ACL_NODE.0.sys:base.DeleteNode,ACL_NODE.1.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.setAssociations=ACL_NODE.0.sys:base.WriteProperties,ACL_NODE.2.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getTargetAssocs=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getSourceAssocs=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_PARENT.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getAssoc=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getPath=ACL_NODE.0.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getPaths=ACL_NODE.0.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getStoreArchiveNode=ACL_NODE.0.sys:base.Read - org.alfresco.service.cmr.repository.NodeService.restoreNode=ACL_NODE.0.sys:base.DeleteNode,ACL_NODE.1.sys:base.CreateChildren - org.alfresco.service.cmr.repository.NodeService.getChildAssocsWithoutParentAssocsOfType=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.countChildAssocs=ACL_NODE.0.sys:base.ReadChildren - org.alfresco.service.cmr.repository.NodeService.*=ACL_DENY + org.alfresco.rest.api.nodes.NodeAssocService.createAssociation=ACL_NODE.0.sys:base.WriteProperties,ACL_NODE.1.sys:base.ReadProperties + org.alfresco.rest.api.nodes.NodeAssocService.removeAssociation=ACL_NODE.0.sys:base.DeleteNode,ACL_NODE.1.sys:base.ReadProperties + org.alfresco.rest.api.nodes.NodeAssocService.setAssociations=ACL_NODE.0.sys:base.WriteProperties,ACL_NODE.2.sys:base.ReadProperties + org.alfresco.rest.api.nodes.NodeAssocService.getTargetAssocs=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_NODE.sys:base.ReadProperties + org.alfresco.rest.api.nodes.NodeAssocService.getSourceAssocs=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_PARENT.sys:base.ReadProperties + org.alfresco.rest.api.nodes.NodeAssocService.getAssoc=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties + org.alfresco.rest.api.nodes.NodeAssocService.*=ACL_DENY + + + + + diff --git a/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java b/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java index 65c8e5bbca..bf3964862c 100644 --- a/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java +++ b/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java @@ -69,6 +69,7 @@ public class AbstractNodeRelation implements InitializingBean protected ServiceRegistry sr; protected NodeService nodeService; + protected NodeAssocService nodeAssocService; // wraps initial Peer Assoc permissions protected NamespaceService namespaceService; protected DictionaryService dictionaryService; protected Nodes nodes; @@ -84,9 +85,9 @@ public class AbstractNodeRelation implements InitializingBean } // Introduces permissions for Node Assoc (see public-rest-context.xml) - public void setNodeService(NodeService nodeService) + public void setNodeAssocService(NodeAssocService nodeAssocService) { - this.nodeService = nodeService; + this.nodeAssocService = nodeAssocService; } @Override @@ -95,7 +96,7 @@ public class AbstractNodeRelation implements InitializingBean PropertyCheck.mandatory(this, "serviceRegistry", sr); ParameterCheck.mandatory("nodes", this.nodes); - //this.nodeService = sr.getNodeService(); + this.nodeService = sr.getNodeService(); this.namespaceService = sr.getNamespaceService(); this.dictionaryService = sr.getDictionaryService(); } diff --git a/source/java/org/alfresco/rest/api/nodes/NodeAssocService.java b/source/java/org/alfresco/rest/api/nodes/NodeAssocService.java new file mode 100644 index 0000000000..c3375e0147 --- /dev/null +++ b/source/java/org/alfresco/rest/api/nodes/NodeAssocService.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2005-2016 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.rest.api.nodes; + +import org.alfresco.service.cmr.repository.AssociationExistsException; +import org.alfresco.service.cmr.repository.AssociationRef; +import org.alfresco.service.cmr.repository.InvalidNodeRefException; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.namespace.QName; +import org.alfresco.service.namespace.QNamePattern; + +import java.io.Serializable; +import java.util.List; + +/** + * @deprecated Intermediate wrapper (not a public service) - eventually push permissions down to NodeService + * + * @author janv + */ +public interface NodeAssocService +{ + AssociationRef createAssociation(NodeRef sourceRef, NodeRef targetRef, QName assocTypeQName) + throws InvalidNodeRefException, AssociationExistsException; + + void removeAssociation(NodeRef sourceRef, NodeRef targetRef, QName assocTypeQName) + throws InvalidNodeRefException; + + void setAssociations(NodeRef sourceRef, QName assocTypeQName, List targetRefs); + + AssociationRef getAssoc(Long id); + + List getTargetAssocs(NodeRef sourceRef, QNamePattern qnamePattern) + throws InvalidNodeRefException; + + List getTargetAssocsByPropertyValue(NodeRef sourceRef, QNamePattern qnamePattern, QName propertyQName, Serializable propertyValue); + + List getSourceAssocs(NodeRef targetRef, QNamePattern qnamePattern) + throws InvalidNodeRefException; +} diff --git a/source/java/org/alfresco/rest/api/nodes/NodeAssocServiceImpl.java b/source/java/org/alfresco/rest/api/nodes/NodeAssocServiceImpl.java new file mode 100644 index 0000000000..142b0aaefb --- /dev/null +++ b/source/java/org/alfresco/rest/api/nodes/NodeAssocServiceImpl.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2005-2016 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.rest.api.nodes; + +import org.alfresco.service.cmr.repository.AssociationExistsException; +import org.alfresco.service.cmr.repository.AssociationRef; +import org.alfresco.service.cmr.repository.InvalidNodeRefException; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.namespace.QName; +import org.alfresco.service.namespace.QNamePattern; + +import java.io.Serializable; +import java.util.List; + +/** + * @deprecated Intermediate wrapper (not a public service) - eventually push permissions down to NodeService + * + * @author janv + */ +public class NodeAssocServiceImpl implements NodeAssocService +{ + protected NodeService nodeService; + + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + public AssociationRef createAssociation(NodeRef sourceRef, NodeRef targetRef, QName assocTypeQName) + throws InvalidNodeRefException, AssociationExistsException + + { + return nodeService.createAssociation(sourceRef, targetRef, assocTypeQName); + } + + public void removeAssociation(NodeRef sourceRef, NodeRef targetRef, QName assocTypeQName) + throws InvalidNodeRefException + { + nodeService.removeAssociation(sourceRef, targetRef, assocTypeQName); + } + + public void setAssociations(NodeRef sourceRef, QName assocTypeQName, List targetRefs) + { + nodeService.setAssociations(sourceRef, assocTypeQName, targetRefs); + } + + public AssociationRef getAssoc(Long id) + { + return nodeService.getAssoc(id); + } + + public List getTargetAssocs(NodeRef sourceRef, QNamePattern qnamePattern) + throws InvalidNodeRefException + { + return nodeService.getTargetAssocs(sourceRef, qnamePattern); + } + + + public List getTargetAssocsByPropertyValue(NodeRef sourceRef, QNamePattern qnamePattern, QName propertyQName, Serializable propertyValue) + { + return nodeService.getTargetAssocsByPropertyValue(sourceRef, qnamePattern, propertyQName, propertyValue); + } + + public List getSourceAssocs(NodeRef targetRef, QNamePattern qnamePattern) + throws InvalidNodeRefException + { + return nodeService.getSourceAssocs(targetRef, qnamePattern); + } +} diff --git a/source/java/org/alfresco/rest/api/nodes/NodeSourcesRelation.java b/source/java/org/alfresco/rest/api/nodes/NodeSourcesRelation.java index 65a2aeb946..a171dd4201 100644 --- a/source/java/org/alfresco/rest/api/nodes/NodeSourcesRelation.java +++ b/source/java/org/alfresco/rest/api/nodes/NodeSourcesRelation.java @@ -51,7 +51,7 @@ public class NodeSourcesRelation extends AbstractNodeRelation implements Relatio QNamePattern assocTypeQNameParam = getAssocTypeFromWhereElseAll(parameters); - List assocRefs = nodeService.getSourceAssocs(targetNodeRef, assocTypeQNameParam); + List assocRefs = nodeAssocService.getSourceAssocs(targetNodeRef, assocTypeQNameParam); return listNodePeerAssocs(assocRefs, parameters, false); } diff --git a/source/java/org/alfresco/rest/api/nodes/NodeTargetsRelation.java b/source/java/org/alfresco/rest/api/nodes/NodeTargetsRelation.java index 4c67c5e14b..7d23d55c7a 100644 --- a/source/java/org/alfresco/rest/api/nodes/NodeTargetsRelation.java +++ b/source/java/org/alfresco/rest/api/nodes/NodeTargetsRelation.java @@ -65,7 +65,7 @@ public class NodeTargetsRelation extends AbstractNodeRelation implements QNamePattern assocTypeQNameParam = getAssocTypeFromWhereElseAll(parameters); - List assocRefs = nodeService.getTargetAssocs(sourceNodeRef, assocTypeQNameParam); + List assocRefs = nodeAssocService.getTargetAssocs(sourceNodeRef, assocTypeQNameParam); return listNodePeerAssocs(assocRefs, parameters, true); } @@ -88,7 +88,7 @@ public class NodeTargetsRelation extends AbstractNodeRelation implements try { NodeRef tgtNodeRef = nodes.validateNode(targetNodeId); - nodeService.createAssociation(srcNodeRef, tgtNodeRef, assocTypeQName); + nodeAssocService.createAssociation(srcNodeRef, tgtNodeRef, assocTypeQName); } catch (AssociationExistsException aee) { @@ -125,12 +125,12 @@ public class NodeTargetsRelation extends AbstractNodeRelation implements boolean found = false; - List assocRefs = nodeService.getTargetAssocs(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, sourceNodeId), assocTypeQName); + List assocRefs = nodeAssocService.getTargetAssocs(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, sourceNodeId), assocTypeQName); for (AssociationRef assocRef : assocRefs) { if (assocRef.getTargetRef().equals(tgtNodeRef)) { - nodeService.removeAssociation(srcNodeRef, tgtNodeRef, assocRef.getTypeQName()); + nodeAssocService.removeAssociation(srcNodeRef, tgtNodeRef, assocRef.getTypeQName()); found = true; } }