From f7622c0231a61648546cfedbc045fee52a75ecc2 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Tue, 14 Feb 2017 16:19:45 +0000 Subject: [PATCH] RM-4681 Add behaviours to restrict where rm items can be created. Record categories can only go in the file plan, or under other record categories. Record folders can only have categories as a primary parent, and holds or transfers as secondary parents. --- .../model/rma/type/RecordCategoryType.java | 7 +++- .../model/rma/type/RecordFolderType.java | 38 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java index 4d6d476ebf..b1d7e7a60f 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java @@ -178,13 +178,18 @@ public class RecordCategoryType extends BaseBehaviourBean @Override public Void doWork() { + // Check the parent is either a file plan or a category. + if (!isFilePlan(childAssocRef.getParentRef()) && !isRecordCategory(childAssocRef.getParentRef())) + { + throw new AlfrescoRuntimeException("Operation failed: Record categories must go under file plans or categories."); + } + // setup record category permissions filePlanPermissionService.setupRecordCategoryPermissions(childAssocRef.getChildRef()); return null; } }); - } /** diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java index 2b60c6ff2b..20badd2005 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java @@ -64,6 +64,7 @@ import org.springframework.extensions.surf.util.I18NUtil; ) public class RecordFolderType extends AbstractDisposableItem implements NodeServicePolicies.OnMoveNodePolicy, + NodeServicePolicies.OnCreateNodePolicy, NodeServicePolicies.OnCreateChildAssociationPolicy { /** record service */ @@ -123,6 +124,7 @@ public class RecordFolderType extends AbstractDisposableItem AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork() { + @Override public Object doWork() { // clean record folder @@ -270,4 +272,40 @@ public class RecordFolderType extends AbstractDisposableItem behaviourFilter.enableBehaviour(); } } + + /** {@inheritDoc}} */ + @Override + @Behaviour + ( + kind = BehaviourKind.CLASS, + notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT + ) + public void onCreateNode(final ChildAssociationRef childAssocRef) + { + // execute behaviour code as system user + AuthenticationUtil.runAsSystem(new RunAsWork() + { + @Override + public Void doWork() + { + if (childAssocRef.isPrimary()) + { + // Check the primary parent is a category. + if (!isRecordFolder(childAssocRef.getParentRef())) + { + throw new AlfrescoRuntimeException("Operation failed: Record folders must go under categories."); + } + } + else + { + // Check the secondary parent is a hold or transfer. + if (!isHold(childAssocRef.getParentRef()) && !isTransfer(childAssocRef.getParentRef())) + { + throw new AlfrescoRuntimeException("Operation failed: Record folders can only have secondary parents of holds or transfers."); + } + } + return null; + } + }); + } }