From dd690c6806abf09b02f8220ea7c707cd0ce1efc2 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Thu, 29 May 2014 16:15:48 +0000 Subject: [PATCH] RM-1417 (User with no permissions to Hold container see "Freeze/Add to Hold" action) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@72256 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../hold/HoldServiceImpl.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) 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); + } } }