diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java index 241c2c7e99..a31cad0b54 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImpl.java @@ -209,20 +209,26 @@ public class HoldServiceImpl extends ServiceBaseImpl { ParameterCheck.mandatory("filePlan", filePlan); + List holds = new ArrayList(); + // get the root hold container NodeRef holdContainer = filePlanService.getHoldContainer(filePlan); - // get the children of the root hold container - List holdsAssocs = nodeService.getChildAssocs(holdContainer, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); - List holds = new ArrayList(holdsAssocs.size()); - for (ChildAssociationRef holdAssoc : holdsAssocs) + // If you remove the "All Records Management Roles" which means users do not have read permissions on hold container + // at all, the hold container will not be found for the logged in user. That's why we need to do a check here. + if (holdContainer != null) { - NodeRef hold = holdAssoc.getChildRef(); - boolean hasPermissionOnHold = (permissionService.hasPermission(hold, RMPermissionModel.FILING) == AccessStatus.ALLOWED); - if (isHold(hold) && hasPermissionOnHold) + // get the children of the root hold container + List holdsAssocs = nodeService.getChildAssocs(holdContainer, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); + for (ChildAssociationRef holdAssoc : holdsAssocs) { - // add to list of holds - holds.add(hold); + NodeRef hold = holdAssoc.getChildRef(); + boolean hasPermissionOnHold = (permissionService.hasPermission(hold, RMPermissionModel.FILING) == AccessStatus.ALLOWED); + if (isHold(hold) && hasPermissionOnHold) + { + // add to list of holds + holds.add(hold); + } } }