ACS-3605 Add limit to maximum size of optional linkedToBy field.

This commit is contained in:
Tom Page
2022-10-04 15:54:31 +01:00
parent 6747e300af
commit 3682ddf652
4 changed files with 8 additions and 5 deletions

View File

@@ -54,6 +54,7 @@ public class RuleSetLoader
protected static final String IS_LINKED_TO = "isLinkedTo"; protected static final String IS_LINKED_TO = "isLinkedTo";
protected static final String RULE_IDS = "ruleIds"; protected static final String RULE_IDS = "ruleIds";
private static final int MAX_INHERITED_BY_SIZE = 100; private static final int MAX_INHERITED_BY_SIZE = 100;
private static final int MAX_LINKED_TO_BY_SIZE = 100;
private NodeService nodeService; private NodeService nodeService;
private RuleService ruleService; private RuleService ruleService;
private RestRuleModelMapper restRuleModelMapper; private RestRuleModelMapper restRuleModelMapper;
@@ -123,7 +124,7 @@ public class RuleSetLoader
private List<NodeRef> loadLinkedToBy(NodeRef ruleSetNodeRef) private List<NodeRef> loadLinkedToBy(NodeRef ruleSetNodeRef)
{ {
return ruleService.getFoldersLinkingToRuleSet(ruleSetNodeRef); return ruleService.getFoldersLinkingToRuleSet(ruleSetNodeRef, MAX_LINKED_TO_BY_SIZE);
} }
private boolean loadIsInherited(NodeRef ruleSetNodeRef) private boolean loadIsInherited(NodeRef ruleSetNodeRef)

View File

@@ -692,11 +692,12 @@ public class RuleServiceImpl
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
@Experimental @Experimental
public List<NodeRef> getFoldersLinkingToRuleSet(NodeRef ruleSet) public List<NodeRef> getFoldersLinkingToRuleSet(NodeRef ruleSet, int maxFoldersToReturn)
{ {
NodeRef parentRef = nodeService.getPrimaryParent(ruleSet).getParentRef(); NodeRef parentRef = nodeService.getPrimaryParent(ruleSet).getParentRef();
return nodeService.getParentAssocs(ruleSet) return nodeService.getParentAssocs(ruleSet)
.stream() .stream()
.limit(maxFoldersToReturn)
.map(ChildAssociationRef::getParentRef) .map(ChildAssociationRef::getParentRef)
.filter(folder -> !folder.equals(parentRef)) .filter(folder -> !folder.equals(parentRef))
.filter(folder -> permissionService.hasReadPermission(folder) == ALLOWED) .filter(folder -> permissionService.hasReadPermission(folder) == ALLOWED)

View File

@@ -243,11 +243,12 @@ public interface RuleService
* Get a list of folders linking to the specified rule set. * Get a list of folders linking to the specified rule set.
* *
* @param ruleSet The rule set node. * @param ruleSet The rule set node.
* @param maxFoldersToReturn A limit on the number of folders to return.
* @return The list linking folders. * @return The list linking folders.
*/ */
@Auditable (parameters = { "ruleSet" }) @Auditable (parameters = { "ruleSet" })
@Experimental @Experimental
List<NodeRef> getFoldersLinkingToRuleSet(NodeRef ruleSet); List<NodeRef> getFoldersLinkingToRuleSet(NodeRef ruleSet, int maxFoldersToReturn);
/** /**
* Get the rule given its node reference * Get the rule given its node reference

View File

@@ -730,7 +730,7 @@ public class RuleServiceImplUnitTest
given(linkingAssocMock.getParentRef()).willReturn(linkingFolder); given(linkingAssocMock.getParentRef()).willReturn(linkingFolder);
given(nodeService.getParentAssocs(ruleSetNode)).willReturn(List.of(owningAssocMock, linkingAssocMock)); given(nodeService.getParentAssocs(ruleSetNode)).willReturn(List.of(owningAssocMock, linkingAssocMock));
List<NodeRef> linkingFolders = ruleService.getFoldersLinkingToRuleSet(ruleSetNode); List<NodeRef> linkingFolders = ruleService.getFoldersLinkingToRuleSet(ruleSetNode, 100);
assertEquals("Unexpected list of linking folders.", List.of(linkingFolder), linkingFolders); assertEquals("Unexpected list of linking folders.", List.of(linkingFolder), linkingFolders);
} }
@@ -752,7 +752,7 @@ public class RuleServiceImplUnitTest
// The currect user does not have permission to view the folder. // The currect user does not have permission to view the folder.
given(permissionService.hasReadPermission(linkingFolder)).willReturn(DENIED); given(permissionService.hasReadPermission(linkingFolder)).willReturn(DENIED);
List<NodeRef> linkingFolders = ruleService.getFoldersLinkingToRuleSet(ruleSetNode); List<NodeRef> linkingFolders = ruleService.getFoldersLinkingToRuleSet(ruleSetNode, 100);
assertEquals("Unexpected list of linking folders.", emptyList(), linkingFolders); assertEquals("Unexpected list of linking folders.", emptyList(), linkingFolders);
} }