diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/FilePlanPermissionServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/FilePlanPermissionServiceImpl.java index 2c4dbcea54..dff4959767 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/FilePlanPermissionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/FilePlanPermissionServiceImpl.java @@ -63,7 +63,8 @@ import org.apache.commons.logging.LogFactory; @BehaviourBean public class FilePlanPermissionServiceImpl extends ServiceBaseImpl implements FilePlanPermissionService, - RMPermissionModel + RMPermissionModel, + NodeServicePolicies.OnMoveNodePolicy { /** Permission service */ private PermissionService permissionService; @@ -99,6 +100,10 @@ public class FilePlanPermissionServiceImpl extends ServiceBaseImpl NodeServicePolicies.OnMoveNodePolicy.QNAME, ASPECT_RECORD, new JavaBehaviour(this, "onMoveRecord", TRANSACTION_COMMIT)); + getPolicyComponent().bindClassBehaviour( + NodeServicePolicies.OnMoveNodePolicy.QNAME, + TYPE_RECORD_CATEGORY, + new JavaBehaviour(this, "onMoveNode", TRANSACTION_COMMIT)); } /** @@ -542,4 +547,16 @@ public class FilePlanPermissionServiceImpl extends ServiceBaseImpl { return isFilePlanContainer(nodeRef) || isRecordFolder(nodeRef) || isRecord(nodeRef); } + + /** + * @see org.alfresco.repo.node.NodeServicePolicies.OnMoveNodePolicy#onMoveNode(org.alfresco.service.cmr.repository.ChildAssociationRef, org.alfresco.service.cmr.repository.ChildAssociationRef) + */ + @Override + public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef) + { + if (isFilePlan(newChildAssocRef.getParentRef())) + { + permissionService.setInheritParentPermissions(oldChildAssocRef.getChildRef(), false); + } + } } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FilePlanPermissionServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FilePlanPermissionServiceImplTest.java index 7929c67cca..eea15bc001 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FilePlanPermissionServiceImplTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FilePlanPermissionServiceImplTest.java @@ -1240,4 +1240,25 @@ public class FilePlanPermissionServiceImplTest extends BaseRMTestCase assertTrue(accessPermissions.containsKey(adminRole)); assertEquals(RMPermissionModel.FILING, accessPermissions.get(adminRole)); } + + public void testMoveSubCategoryIntoFilePlan() + { + final NodeRef rootCategory = filePlanService.createRecordCategory(filePlan, GUID.generate()); + final NodeRef subCategory = filePlanService.createRecordCategory(rootCategory, GUID.generate()); + + assertFalse(permissionService.getInheritParentPermissions(rootCategory)); + assertTrue(permissionService.getInheritParentPermissions(subCategory)); + + final NodeRef movedSubCategory = doTestInTransaction(new Test() + { + @Override + public NodeRef run() throws Exception + { + return fileFolderService.move(subCategory, filePlan, null).getNodeRef(); + } + }); + + assertFalse(permissionService.getInheritParentPermissions(rootCategory)); + assertFalse(permissionService.getInheritParentPermissions(movedSubCategory)); + } }