diff --git a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRuleSetsTests.java b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRuleSetsTests.java
index fe037be6b2..37cc38ab66 100644
--- a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRuleSetsTests.java
+++ b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/rules/GetRuleSetsTests.java
@@ -27,6 +27,7 @@ package org.alfresco.rest.rules;
import static org.alfresco.rest.requests.RuleSettings.IS_INHERITANCE_ENABLED;
import static org.alfresco.rest.rules.RulesTestsUtils.createRuleModel;
+import static org.alfresco.rest.rules.RulesTestsUtils.createRuleModelWithDefaultValues;
import static org.alfresco.rest.rules.RulesTestsUtils.createRuleModelWithModifiedValues;
import static org.alfresco.utility.report.log.Step.STEP;
import static org.junit.Assert.assertTrue;
@@ -322,6 +323,43 @@ public class GetRuleSetsTests extends RestTest
.assertThat().field("id").is(ruleSetId);
}
+ /** Check we can get the folders that link to a rule set and that this respects permissions. */
+ @Test (groups = { TestGroup.REST_API, TestGroup.RULES })
+ public void getRuleSetsAndLinkedToBy()
+ {
+ STEP("Create a site owned by admin and add user as a contributor");
+ SiteModel siteModel = dataSite.usingAdmin().createPrivateRandomSite();
+ dataUser.addUserToSite(user, siteModel, UserRole.SiteContributor);
+
+ STEP("Create the folder structure");
+ FolderModel ruleFolder = dataContent.usingUser(user).usingSite(siteModel).createFolder();
+ FolderModel publicFolder = dataContent.usingUser(user).usingSite(siteModel).createFolder();
+ FolderModel privateFolder = dataContent.usingAdmin().usingSite(siteModel).createFolder();
+ dataContent.usingAdmin().usingResource(privateFolder).setInheritPermissions(false);
+
+ STEP("Remove the user from the site");
+ dataUser.removeUserFromSite(user, siteModel);
+
+ STEP("Create a rule in the folder and link to it from the other two.");
+ RestRuleModel ruleModel = createRuleModelWithDefaultValues();
+ coreAPIForUser().usingNode(ruleFolder).usingDefaultRuleSet().createSingleRule(ruleModel);
+ RestRuleSetModelsCollection ruleSets = coreAPIForAdmin().usingNode(ruleFolder).getListOfRuleSets();
+ String ruleSetId = ruleSets.getEntries().get(0).onModel().getId();
+ RestRuleSetLinkModel ruleSetLink = new RestRuleSetLinkModel();
+ ruleSetLink.setId(ruleFolder.getNodeRef());
+ coreAPIForUser().usingNode(publicFolder).createRuleLink(ruleSetLink);
+ coreAPIForUser().usingNode(privateFolder).createRuleLink(ruleSetLink);
+
+ STEP("Get the rule set and linkedToBy field");
+ RestRuleSetModel ruleSet = coreAPIForUser().usingNode(ruleFolder)
+ .include("linkedToBy")
+ .getRuleSet(ruleSetId);
+
+ restClient.assertStatusCodeIs(OK);
+ ruleSet.assertThat().field("linkedToBy").is(List.of(publicFolder.getNodeRef()))
+ .assertThat().field("id").is(ruleSetId);
+ }
+
private RestCoreAPI coreAPIForUser()
{
return restClient.authenticateUser(user).withCoreAPI();
diff --git a/pom.xml b/pom.xml
index a6e8405f95..589912dfba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -123,7 +123,7 @@
2.7.4
3.0.49
5.2.0
- 1.117
+ 1.119
1.32
1.9
1.7
diff --git a/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java b/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java
index 9800de58b3..a48a800651 100644
--- a/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java
+++ b/remote-api/src/main/java/org/alfresco/rest/api/impl/rules/RuleSetLoader.java
@@ -30,6 +30,7 @@ import static org.alfresco.rest.api.model.rules.InclusionType.LINKED;
import static org.alfresco.rest.api.model.rules.InclusionType.OWNED;
import java.util.List;
+import java.util.stream.Collectors;
import org.alfresco.rest.api.model.rules.RuleSet;
import org.alfresco.service.Experimental;
@@ -45,7 +46,8 @@ public class RuleSetLoader
protected static final String OWNING_FOLDER = "owningFolder";
protected static final String INCLUSION_TYPE = "inclusionType";
protected static final String INHERITED_BY = "inheritedBy";
- public static final int MAX_INHERITED_BY_SIZE = 100;
+ protected static final String LINKED_TO_BY = "linkedToBy";
+ private static final int MAX_INHERITED_BY_SIZE = 100;
private NodeService nodeService;
private RuleService ruleService;
@@ -87,6 +89,15 @@ public class RuleSetLoader
{
ruleSet.setInheritedBy(loadInheritedBy(ruleSetNodeRef));
}
+ if (includes.contains(LINKED_TO_BY))
+ {
+ List linkedToBy = nodeService.getParentAssocs(ruleSetNodeRef)
+ .stream()
+ .map(ChildAssociationRef::getParentRef)
+ .filter(folder -> !folder.equals(parentRef))
+ .collect(Collectors.toList());
+ ruleSet.setLinkedToBy(linkedToBy);
+ }
}
return ruleSet;
}
diff --git a/remote-api/src/main/java/org/alfresco/rest/api/model/rules/RuleSet.java b/remote-api/src/main/java/org/alfresco/rest/api/model/rules/RuleSet.java
index e2719bd4ed..98a7c24e87 100644
--- a/remote-api/src/main/java/org/alfresco/rest/api/model/rules/RuleSet.java
+++ b/remote-api/src/main/java/org/alfresco/rest/api/model/rules/RuleSet.java
@@ -42,6 +42,7 @@ public class RuleSet
private NodeRef owningFolder;
private InclusionType inclusionType;
private List inheritedBy;
+ private List linkedToBy;
public static RuleSet of(String id)
{
@@ -98,6 +99,16 @@ public class RuleSet
this.inheritedBy = inheritedBy;
}
+ public List getLinkedToBy()
+ {
+ return linkedToBy;
+ }
+
+ public void setLinkedToBy(List linkedToBy)
+ {
+ this.linkedToBy = linkedToBy;
+ }
+
@Override
public String toString()
{
@@ -107,6 +118,7 @@ public class RuleSet
.add("owningFolder='" + owningFolder + "'")
.add("inclusionType='" + inclusionType + "'")
.add("inheritedBy='" + inheritedBy + "'")
+ .add("linkedToBy='" + linkedToBy + "'")
.toString()
+ '}';
}
@@ -122,13 +134,14 @@ public class RuleSet
return Objects.equals(id, ruleSet.id)
&& Objects.equals(owningFolder, ruleSet.owningFolder)
&& inclusionType == ruleSet.inclusionType
- && Objects.equals(inheritedBy, ruleSet.inheritedBy);
+ && Objects.equals(inheritedBy, ruleSet.inheritedBy)
+ && Objects.equals(linkedToBy, ruleSet.linkedToBy);
}
@Override
public int hashCode()
{
- return Objects.hash(id, owningFolder, inclusionType, inheritedBy);
+ return Objects.hash(id, owningFolder, inclusionType, inheritedBy, linkedToBy);
}
public static Builder builder()
@@ -142,6 +155,7 @@ public class RuleSet
private NodeRef owningFolder;
private InclusionType inclusionType;
private List inheritedBy;
+ private List linkedToBy;
public Builder id(String id)
{
@@ -167,6 +181,12 @@ public class RuleSet
return this;
}
+ public Builder linkedToBy(List linkedToBy)
+ {
+ this.linkedToBy = linkedToBy;
+ return this;
+ }
+
public RuleSet create()
{
final RuleSet ruleSet = new RuleSet();
@@ -174,6 +194,7 @@ public class RuleSet
ruleSet.setOwningFolder(owningFolder);
ruleSet.setInclusionType(inclusionType);
ruleSet.setInheritedBy(inheritedBy);
+ ruleSet.setLinkedToBy(linkedToBy);
return ruleSet;
}
}
diff --git a/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RuleSetLoaderTest.java b/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RuleSetLoaderTest.java
index f30cef0bf3..51a7c52bea 100644
--- a/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RuleSetLoaderTest.java
+++ b/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/RuleSetLoaderTest.java
@@ -27,6 +27,7 @@ package org.alfresco.rest.api.impl.rules;
import static org.alfresco.rest.api.impl.rules.RuleSetLoader.INCLUSION_TYPE;
import static org.alfresco.rest.api.impl.rules.RuleSetLoader.INHERITED_BY;
+import static org.alfresco.rest.api.impl.rules.RuleSetLoader.LINKED_TO_BY;
import static org.alfresco.rest.api.impl.rules.RuleSetLoader.OWNING_FOLDER;
import static org.alfresco.rest.api.model.rules.InclusionType.INHERITED;
import static org.alfresco.rest.api.model.rules.InclusionType.LINKED;
@@ -148,4 +149,14 @@ public class RuleSetLoaderTest extends TestCase
RuleSet expected = RuleSet.builder().id(RULE_SET_ID).inheritedBy(List.of(INHERITING_FOLDER)).create();
assertEquals(expected, actual);
}
+
+ @Test
+ public void testLoadRuleSet_linkedToBy()
+ {
+ // Call the method under test.
+ RuleSet actual = ruleSetLoader.loadRuleSet(RULE_SET_NODE, FOLDER_NODE, List.of(LINKED_TO_BY));
+
+ RuleSet expected = RuleSet.builder().id(RULE_SET_ID).linkedToBy(List.of(LINKING_FOLDER)).create();
+ assertEquals(expected, actual);
+ }
}