diff --git a/config/alfresco/public-rest-context.xml b/config/alfresco/public-rest-context.xml
index 5a543416e3..605da78cbe 100644
--- a/config/alfresco/public-rest-context.xml
+++ b/config/alfresco/public-rest-context.xml
@@ -462,7 +462,7 @@
-
+
diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java
index ba4dfdd106..b1c7cfaf47 100644
--- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java
+++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java
@@ -45,12 +45,14 @@ import org.alfresco.repo.node.getchildren.GetChildrenCannedQuery;
import org.alfresco.repo.security.permissions.AccessDeniedException;
import org.alfresco.rest.antlr.WhereClauseParser;
import org.alfresco.rest.api.Nodes;
+import org.alfresco.rest.api.QuickShareLinks;
import org.alfresco.rest.api.model.ContentInfo;
import org.alfresco.rest.api.model.Document;
import org.alfresco.rest.api.model.Folder;
import org.alfresco.rest.api.model.Node;
import org.alfresco.rest.api.model.PathInfo;
import org.alfresco.rest.api.model.PathInfo.ElementInfo;
+import org.alfresco.rest.api.model.QuickShareLink;
import org.alfresco.rest.api.model.UserInfo;
import org.alfresco.rest.framework.core.exceptions.ApiException;
import org.alfresco.rest.framework.core.exceptions.ConstraintViolatedException;
@@ -78,10 +80,8 @@ import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
import org.alfresco.service.cmr.model.FileExistsException;
import org.alfresco.service.cmr.model.FileFolderService;
-import org.alfresco.service.cmr.model.FileFolderServiceType;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.model.FileNotFoundException;
-import org.alfresco.service.cmr.quickshare.QuickShareService;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.ContentService;
@@ -150,7 +150,10 @@ public class NodesImpl implements Nodes
private ContentService contentService;
private ActionService actionService;
private VersionService versionService;
- private QuickShareService quickShareService;
+
+ // note: circular - Nodes/QuickShareLinks currently use each other (albeit for different methods)
+ private QuickShareLinks quickShareLinks;
+
private Repository repositoryHelper;
private ServiceRegistry sr;
private Set defaultIgnoreTypesAndAspects;
@@ -197,9 +200,9 @@ public class NodesImpl implements Nodes
this.repositoryHelper = repositoryHelper;
}
- public void setQuickShareService(QuickShareService quickShareService)
+ public void setQuickShareLinks(QuickShareLinks quickShareLinks)
{
- this.quickShareService = quickShareService;
+ this.quickShareLinks = quickShareLinks;
}
public void setIgnoreTypes(Set ignoreTypesAndAspects)
@@ -1280,13 +1283,14 @@ public class NodesImpl implements Nodes
// TODO: optional PATCH mechanism to add one new new aspect (with some related aspect properties) without affecting existing aspects/properties
for (QName aQName : aspectsToRemove)
{
- // in future, this could/should be part of QuickShareService aspect "behaviour"
if (aQName.equals(QuickShareModel.ASPECT_QSHARE))
{
- String qShareId = (String)nodeService.getProperty(nodeRef, QuickShareModel.PROP_QSHARE_SHAREDID);
- if (qShareId != null)
+ String qSharedId = (String)nodeService.getProperty(nodeRef, QuickShareModel.PROP_QSHARE_SHAREDID);
+ if (qSharedId != null)
{
- quickShareService.unshareContent(qShareId);
+ // note: for now, go via QuickShareLinks (rather than QuickShareService) to ensure consistent permission checks
+ // alternatively we could disallow (or ignore) "qshare:shared" aspect removal
+ quickShareLinks.delete(qSharedId, null);
}
}
@@ -1295,10 +1299,13 @@ public class NodesImpl implements Nodes
for (QName aQName : aspectsToAdd)
{
- // in future, this could/should be part of QuickShareService aspect "behaviour"
if (aQName.equals(QuickShareModel.ASPECT_QSHARE))
{
- quickShareService.shareContent(nodeRef);
+ // note: for now, go via QuickShareLinks (rather than QuickShareService) to ensure consistent permission checks
+ // alternatively we could disallow (or ignore) "qshare:shared" aspect addition
+ QuickShareLink qs = new QuickShareLink();
+ qs.setNodeId(nodeRef.getId());
+ quickShareLinks.create(Collections.singletonList(qs), null);
}
nodeService.addAspect(nodeRef, aQName, null);