From 2fd27133e13352df427706821ea999884b40a239 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Fri, 30 May 2014 14:13:28 +0000 Subject: [PATCH] RM-1429 (The user with read-only permissions on the item can unfreeze it via deleting hold) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@72349 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../hold/HoldServiceImpl.java | 6 ++-- .../test/service/HoldServiceImplTest.java | 36 +++++++++++++++++++ 2 files changed, 39 insertions(+), 3 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 628a110294..7a7171daba 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 @@ -418,12 +418,11 @@ public class HoldServiceImpl extends ServiceBaseImpl throw new AlfrescoRuntimeException("Can't delete hold, becuase passed node is not a hold. (hold=" + hold.toString() + ")"); } - /* List held = getHeld(hold); List heldNames = new ArrayList(); for (NodeRef nodeRef : held) { - if (permissionService.hasPermission(hold, RMPermissionModel.FILING) == AccessStatus.ALLOWED) + if (permissionService.hasPermission(nodeRef, RMPermissionModel.FILING) == AccessStatus.DENIED) { heldNames.add((String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME)); } @@ -435,11 +434,12 @@ public class HoldServiceImpl extends ServiceBaseImpl for (String name : heldNames) { sb.append("\n "); + sb.append("'"); sb.append(name); + sb.append("'"); } throw new AlfrescoRuntimeException("Can't delete hold, because filing permissions for the following items are needed: " + sb.toString()); } - */ // delete the hold node nodeService.deleteNode(hold); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/HoldServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/HoldServiceImplTest.java index b3f602481e..d343044036 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/HoldServiceImplTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/HoldServiceImplTest.java @@ -360,4 +360,40 @@ public class HoldServiceImplTest extends BaseRMTestCase } }); } + + public void testDeleteHoldWithoutPermissionsOnChildren() + { + // Create the test hold + final NodeRef hold = createAndCheckHold(); + + doTestInTransaction(new Test() + { + @Override + public Void run() throws Exception + { + // Add the user to the RM Manager role + filePlanRoleService.assignRoleToAuthority(filePlan, ROLE_NAME_RECORDS_MANAGER, userName); + + // Give the user filing permissions on the hold + permissionService.setPermission(hold, userName, RMPermissionModel.FILING, true); + + // Give the user read permissions on the record folder + permissionService.setPermission(rmFolder, userName, RMPermissionModel.READ_RECORDS, true); + + // Add record folder to the hold + holdService.addToHold(hold, rmFolder); + + return null; + } + }); + + doTestInTransaction(new FailureTest(AlfrescoRuntimeException.class) + { + @Override + public void run() throws Exception + { + holdService.deleteHold(hold); + } + }, userName); + } }