From 60833cb131082acff4c4bd00f97969f7232c5380 Mon Sep 17 00:00:00 2001 From: David Webster Date: Thu, 6 Oct 2016 21:59:11 +0100 Subject: [PATCH 01/18] MNT-16852: First pass at Write Properties permission handling --- .../security/permissions/impl/RMPermissionServiceImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java index 8b43417fc4..75b96eaec0 100644 --- a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java @@ -100,6 +100,13 @@ public class RMPermissionServiceImpl extends PermissionServiceImpl { return super.hasPermission(nodeRef, RMPermissionModel.FILE_RECORDS); } + // Add WRITE_PROPERTIES check in for MNT-16852. + else if (AccessStatus.DENIED.equals(acs) && + PermissionService.WRITE_PROPERTIES.equals(perm) && + nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) + { + return super.hasPermission(nodeRef, RMPermissionModel.EDIT_RECORD_METADATA); + } return acs; } From 60dd571153f1d6d3a4430cd008458406e5335f86 Mon Sep 17 00:00:00 2001 From: David Webster Date: Tue, 11 Oct 2016 12:51:25 +0100 Subject: [PATCH 02/18] MNT-16852: Give write properties permission to file records --- .../permissions/impl/RMPermissionServiceImpl.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java index 75b96eaec0..f641a487cd 100644 --- a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java @@ -93,20 +93,13 @@ public class RMPermissionServiceImpl extends PermissionServiceImpl { return super.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS); } - // Added ADD_CHILDREN check in for MNT-16852. + // Added ADD_CHILDREN and WRITE_PROPERTIES check in for MNT-16852. else if (AccessStatus.DENIED.equals(acs) && - (PermissionService.WRITE.equals(perm) || PermissionService.ADD_CHILDREN.equals(perm)) && + (PermissionService.WRITE.equals(perm) || PermissionService.ADD_CHILDREN.equals(perm) || PermissionService.WRITE_PROPERTIES.equals(perm)) && nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) { return super.hasPermission(nodeRef, RMPermissionModel.FILE_RECORDS); } - // Add WRITE_PROPERTIES check in for MNT-16852. - else if (AccessStatus.DENIED.equals(acs) && - PermissionService.WRITE_PROPERTIES.equals(perm) && - nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) - { - return super.hasPermission(nodeRef, RMPermissionModel.EDIT_RECORD_METADATA); - } return acs; } From 674f929acf85b09afa366288e88b0e9ac583a268 Mon Sep 17 00:00:00 2001 From: David Webster Date: Tue, 11 Oct 2016 12:57:38 +0100 Subject: [PATCH 03/18] MNT-16852: Refactor hasPermission method for readability --- .../impl/RMPermissionServiceImpl.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java index f641a487cd..bda4d1ade5 100644 --- a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java @@ -87,18 +87,20 @@ public class RMPermissionServiceImpl extends PermissionServiceImpl public AccessStatus hasPermission(NodeRef nodeRef, String perm) { AccessStatus acs = super.hasPermission(nodeRef, perm); + if (AccessStatus.DENIED.equals(acs) && - PermissionService.READ.equals(perm) && nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) { - return super.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS); - } - // Added ADD_CHILDREN and WRITE_PROPERTIES check in for MNT-16852. - else if (AccessStatus.DENIED.equals(acs) && - (PermissionService.WRITE.equals(perm) || PermissionService.ADD_CHILDREN.equals(perm) || PermissionService.WRITE_PROPERTIES.equals(perm)) && - nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) - { - return super.hasPermission(nodeRef, RMPermissionModel.FILE_RECORDS); + if (PermissionService.READ.equals(perm)) + { + return super.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS); + } + else if (PermissionService.WRITE.equals(perm) || + PermissionService.ADD_CHILDREN.equals(perm) || + PermissionService.WRITE_PROPERTIES.equals(perm)) + { + return super.hasPermission(nodeRef, RMPermissionModel.FILE_RECORDS); + } } return acs; From 0eaa927b38ece49409b39efaff4220a3af68c795 Mon Sep 17 00:00:00 2001 From: David Webster Date: Wed, 12 Oct 2016 09:22:14 +0100 Subject: [PATCH 04/18] MNT-16852: Fix issue reading properties in Outlook Integration --- .../repo/security/permissions/impl/RMPermissionServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java index bda4d1ade5..63c8e95254 100644 --- a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java @@ -91,7 +91,7 @@ public class RMPermissionServiceImpl extends PermissionServiceImpl if (AccessStatus.DENIED.equals(acs) && nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) { - if (PermissionService.READ.equals(perm)) + if (PermissionService.READ.equals(perm) || PermissionService.READ_PROPERTIES.equals(perm)) { return super.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS); } From fa2d37f37b69af8655abb14e3b0166f79f217cfc Mon Sep 17 00:00:00 2001 From: David Webster Date: Wed, 12 Oct 2016 15:08:17 +0100 Subject: [PATCH 05/18] MNT-16852: First pass at extracting permission mapping to properties file. --- .../alfresco-global.properties | 6 +++ .../extended-repository-context.xml | 6 +++ .../impl/RMPermissionServiceImpl.java | 37 +++++++++++++++++-- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties index 46e84685b0..41a1f5aa9c 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties @@ -47,3 +47,9 @@ rm.autocompletesuggestion.nodeParameterSuggester.aspectsAndTypes=rma:record,cm:c # Global RM disposition lifecycle trigger cron job expression # rm.dispositionlifecycletrigger.cronexpression=0 0/5 * * * ? + +# Permission mapping +# these take a comma separated string of permissions from org.alfresco.service.cmr.security.PermissionService +# read maps to ReadRecords and write to FileRecords +rm.haspermissionmap.read=ReadProperties,ReadChildren +rm.haspermissionmap.write=WriteProperties,AddChildren diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml index bd74307107..0218d2d22c 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml @@ -134,6 +134,12 @@ + + {rm.haspermissionmap.read} + + + {rm.haspermissionmap.write} + diff --git a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java index 63c8e95254..b4bb8166d9 100644 --- a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java @@ -19,21 +19,28 @@ package org.alfresco.repo.security.permissions.impl; import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.cache.SimpleCache; + import org.alfresco.repo.security.permissions.AccessControlEntry; import org.alfresco.repo.security.permissions.AccessControlList; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.util.PropertyCheck; +import org.apache.commons.collections.ArrayStack; +import org.apache.commons.lang.StringUtils; import org.springframework.context.ApplicationEvent; + /** * Extends the core permission service implementation allowing the consideration of the read records * permission. @@ -48,6 +55,10 @@ public class RMPermissionServiceImpl extends PermissionServiceImpl /** Writers simple cache */ protected SimpleCache> writersCache; + /** Permission maps*/ + protected String readMapping; + protected String fileMapping; + /** * @see org.alfresco.repo.security.permissions.impl.PermissionServiceImpl#setAnyDenyDenies(boolean) */ @@ -66,6 +77,22 @@ public class RMPermissionServiceImpl extends PermissionServiceImpl this.writersCache = writersCache; } + /** + * @param readMapping the mapping of permissions to ReadRecord + */ + public void setReadMapping(String readMapping) + { + this.readMapping = readMapping; + } + + /** + * @param fileMapping the mapping of permissions to ReadRecord + */ + public void setFileMapping(String fileMapping) + { + this.fileMapping = fileMapping; + } + /** * @see org.alfresco.repo.security.permissions.impl.PermissionServiceImpl#onBootstrap(org.springframework.context.ApplicationEvent) */ @@ -91,13 +118,15 @@ public class RMPermissionServiceImpl extends PermissionServiceImpl if (AccessStatus.DENIED.equals(acs) && nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) { - if (PermissionService.READ.equals(perm) || PermissionService.READ_PROPERTIES.equals(perm)) + + List configuredReadPermissions = Arrays.asList(this.readMapping.split(",")); + List configuredFilePermissions = Arrays.asList(this.fileMapping.split(",")); + + if (PermissionService.READ.equals(perm) || configuredReadPermissions.contains(perm)) { return super.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS); } - else if (PermissionService.WRITE.equals(perm) || - PermissionService.ADD_CHILDREN.equals(perm) || - PermissionService.WRITE_PROPERTIES.equals(perm)) + else if (PermissionService.WRITE.equals(perm) || configuredFilePermissions.contains(perm)) { return super.hasPermission(nodeRef, RMPermissionModel.FILE_RECORDS); } From 40135eb34e5e368e63e1295705c587d0f7681a77 Mon Sep 17 00:00:00 2001 From: David Webster Date: Wed, 12 Oct 2016 15:25:06 +0100 Subject: [PATCH 06/18] MNT-16852: Remove unnecessary imports --- .../security/permissions/impl/RMPermissionServiceImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java index b4bb8166d9..dfb293d89c 100644 --- a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java @@ -19,7 +19,6 @@ package org.alfresco.repo.security.permissions.impl; import java.io.Serializable; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; @@ -36,8 +35,6 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.util.PropertyCheck; -import org.apache.commons.collections.ArrayStack; -import org.apache.commons.lang.StringUtils; import org.springframework.context.ApplicationEvent; From 30831aa221e875e3bfeae24c6c229fb924d28333 Mon Sep 17 00:00:00 2001 From: David Webster Date: Wed, 12 Oct 2016 15:31:12 +0100 Subject: [PATCH 07/18] MNT-16852: Add comment explaining reason behind extracting mapping to properties file --- .../security/permissions/impl/RMPermissionServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java index dfb293d89c..a686397b51 100644 --- a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java @@ -115,7 +115,8 @@ public class RMPermissionServiceImpl extends PermissionServiceImpl if (AccessStatus.DENIED.equals(acs) && nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) { - + // These strings come from alfresco-global.properties and allow fine tuning of the how permissions are mapped. + // This was added as a fix for MNT-16852 to enhance compatibility for our Outlook Integration. List configuredReadPermissions = Arrays.asList(this.readMapping.split(",")); List configuredFilePermissions = Arrays.asList(this.fileMapping.split(",")); From 34dfa8a6480b6146b3d2c28695e50a326fb56ea0 Mon Sep 17 00:00:00 2001 From: David Webster Date: Thu, 13 Oct 2016 11:06:11 +0100 Subject: [PATCH 08/18] MNT-16852: Optimise list conversion as per code review comment --- .../extended-repository-context.xml | 4 +- .../impl/RMPermissionServiceImpl.java | 37 +++++++++++-------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml index 0218d2d22c..b9135668c5 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml @@ -134,10 +134,10 @@ - + {rm.haspermissionmap.read} - + {rm.haspermissionmap.write} diff --git a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java index a686397b51..6f3aa88294 100644 --- a/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/repo/security/permissions/impl/RMPermissionServiceImpl.java @@ -52,9 +52,15 @@ public class RMPermissionServiceImpl extends PermissionServiceImpl /** Writers simple cache */ protected SimpleCache> writersCache; - /** Permission maps*/ - protected String readMapping; - protected String fileMapping; + /** + * Configured Permission mapping. + * + * These strings come from alfresco-global.properties and allow fine tuning of the how permissions are mapped. + * This was added as a fix for MNT-16852 to enhance compatibility with our Outlook Integration. + * + **/ + protected List configuredReadPermissions; + protected List configuredFilePermissions; /** * @see org.alfresco.repo.security.permissions.impl.PermissionServiceImpl#setAnyDenyDenies(boolean) @@ -75,19 +81,25 @@ public class RMPermissionServiceImpl extends PermissionServiceImpl } /** + * Maps the string from the properties file (rm.haspermissionmap.read) + * to the list used in the hasPermission method + * * @param readMapping the mapping of permissions to ReadRecord */ - public void setReadMapping(String readMapping) + public void setConfiguredReadPermissions(String readMapping) { - this.readMapping = readMapping; + this.configuredReadPermissions = Arrays.asList(readMapping.split(",")); } /** - * @param fileMapping the mapping of permissions to ReadRecord + * Maps the string set in the properties file (rm.haspermissionmap.write) + * to the list used in the hasPermission method + * + * @param fileMapping the mapping of permissions to FileRecord */ - public void setFileMapping(String fileMapping) + public void setConfiguredFilePermissions(String fileMapping) { - this.fileMapping = fileMapping; + this.configuredFilePermissions = Arrays.asList(fileMapping.split(",")); } /** @@ -115,16 +127,11 @@ public class RMPermissionServiceImpl extends PermissionServiceImpl if (AccessStatus.DENIED.equals(acs) && nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) { - // These strings come from alfresco-global.properties and allow fine tuning of the how permissions are mapped. - // This was added as a fix for MNT-16852 to enhance compatibility for our Outlook Integration. - List configuredReadPermissions = Arrays.asList(this.readMapping.split(",")); - List configuredFilePermissions = Arrays.asList(this.fileMapping.split(",")); - - if (PermissionService.READ.equals(perm) || configuredReadPermissions.contains(perm)) + if (PermissionService.READ.equals(perm) || this.configuredReadPermissions.contains(perm)) { return super.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS); } - else if (PermissionService.WRITE.equals(perm) || configuredFilePermissions.contains(perm)) + else if (PermissionService.WRITE.equals(perm) || this.configuredFilePermissions.contains(perm)) { return super.hasPermission(nodeRef, RMPermissionModel.FILE_RECORDS); } From c9fdd7f0503ea76271b229075d79ec7855145a2b Mon Sep 17 00:00:00 2001 From: David Webster Date: Thu, 13 Oct 2016 11:36:47 +0100 Subject: [PATCH 09/18] MNT-16852: Fix typo in XML --- .../org_alfresco_module_rm/extended-repository-context.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml index b9135668c5..44dacc7b89 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml @@ -135,10 +135,10 @@ - {rm.haspermissionmap.read} + ${rm.haspermissionmap.read} - {rm.haspermissionmap.write} + ${rm.haspermissionmap.write} From 2df396a7e1d58b95f5daa2812c7ad427a8cda108 Mon Sep 17 00:00:00 2001 From: David Webster Date: Mon, 17 Oct 2016 22:01:17 +0100 Subject: [PATCH 10/18] MNT-16852: HF 2.2.0.2 release, remove snapshot version number --- pom.xml | 2 +- rm-server/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index a27d0c4f86..11f13d7269 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm-parent pom - 2.2.0.2-SNAPSHOT + 2.2.0.2 Alfresco Records Management http://www.alfresco.org/ diff --git a/rm-server/pom.xml b/rm-server/pom.xml index 0b2bb42160..bc5cbfa882 100644 --- a/rm-server/pom.xml +++ b/rm-server/pom.xml @@ -5,7 +5,7 @@ org.alfresco alfresco-rm-parent - 2.2.0.2-SNAPSHOT + 2.2.0.2 4.0.0 alfresco-rm-server From fbb55126d7543a6c0795183e43520a028a51f7f3 Mon Sep 17 00:00:00 2001 From: David Webster Date: Tue, 18 Oct 2016 16:23:46 +0100 Subject: [PATCH 11/18] Set up 2.2.0.x HF branch ready for next release --- pom.xml | 2 +- .../alfresco/module/org_alfresco_module_rm/module.properties | 2 +- rm-server/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 11f13d7269..197172d10a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm-parent pom - 2.2.0.2 + 2.2.0.3-SNAPSHOT Alfresco Records Management http://www.alfresco.org/ diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties index 43284b32f3..f5c791e7ba 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties @@ -6,6 +6,6 @@ module.aliases=org_alfresco_module_dod5015 module.title=Records Management module.description=Alfresco Record Management Extension -module.version=2.2.0.2 +module.version=2.2.0.3 module.repo.version.min=4.2 \ No newline at end of file diff --git a/rm-server/pom.xml b/rm-server/pom.xml index bc5cbfa882..48e289188b 100644 --- a/rm-server/pom.xml +++ b/rm-server/pom.xml @@ -5,7 +5,7 @@ org.alfresco alfresco-rm-parent - 2.2.0.2 + 2.2.0.3-SNAPSHOT 4.0.0 alfresco-rm-server From 859afafee9e2c95268b76231a4915a21367e6a22 Mon Sep 17 00:00:00 2001 From: David Webster Date: Mon, 24 Oct 2016 17:32:37 +0100 Subject: [PATCH 12/18] Merge 7289572a5dc380bab5dc53e09b802ad413869a58 from V2.3 to V2.4 w/ refactor for permissions post processor --- .../alfresco-global.properties | 6 +++ .../extended-repository-context.xml | 15 +++++--- ...ordsManagementPermissionPostProcessor.java | 9 +++-- .../impl/ExtendedPermissionServiceImpl.java | 37 ++++++++++++++++++- .../processor/PermissionPostProcessor.java | 6 ++- 5 files changed, 63 insertions(+), 10 deletions(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties index f83d14dc47..4520306a4e 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/alfresco-global.properties @@ -81,6 +81,12 @@ rm.completerecord.mandatorypropertiescheck.enabled=true # rm.patch.v22.convertToStandardFilePlan=false +# Permission mapping +# these take a comma separated string of permissions from org.alfresco.service.cmr.security.PermissionService +# read maps to ReadRecords and write to FileRecords +rm.haspermissionmap.read=ReadProperties,ReadChildren +rm.haspermissionmap.write=WriteProperties,AddChildren + # # Extended auto-version behaviour. If true and other auto-version properties are satisfied, then # a document will be auto-versioned when its type is changed. diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml index ea70bd391d..98c60525e9 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml @@ -114,10 +114,15 @@ - - - - + + + + + ${rm.haspermissionmap.read} + + + ${rm.haspermissionmap.write} + @@ -262,4 +267,4 @@ - \ No newline at end of file + diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessor.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessor.java index 5b31bdf651..47ca2a4b3e 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessor.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessor.java @@ -27,6 +27,8 @@ package org.alfresco.module.org_alfresco_module_rm.permission; +import java.util.List; + import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.security.permissions.processor.impl.PermissionPostProcessorBaseImpl; @@ -55,20 +57,21 @@ public class RecordsManagementPermissionPostProcessor extends PermissionPostProc * @see org.alfresco.repo.security.permissions.processor.PermissionPostProcessor#process(org.alfresco.service.cmr.security.AccessStatus, org.alfresco.service.cmr.repository.NodeRef, java.lang.String) */ @Override - public AccessStatus process(AccessStatus accessStatus, NodeRef nodeRef, String perm) + public AccessStatus process(AccessStatus accessStatus, NodeRef nodeRef, String perm, + List configuredReadPermissions, List configuredFilePermissions) { AccessStatus result = accessStatus; if (AccessStatus.DENIED.equals(accessStatus) && nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) { // if read denied on rm artifact - if (PermissionService.READ.equals(perm)) + if (PermissionService.READ.equals(perm) || configuredReadPermissions.contains(perm)) { // check for read record result = permissionService.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS); } // if write deinied on rm artificat - else if (PermissionService.WRITE.equals(perm) || PermissionService.ADD_CHILDREN.equals(perm)) + else if (PermissionService.WRITE.equals(perm) || configuredFilePermissions.contains(perm)) { // check for file record result = permissionService.hasPermission(nodeRef, RMPermissionModel.FILE_RECORDS); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java index fb4e89c460..9d45eaafa2 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java @@ -30,6 +30,7 @@ package org.alfresco.repo.security.permissions.impl; import static org.apache.commons.lang.StringUtils.isNotBlank; import java.io.Serializable; +import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -40,6 +41,7 @@ import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.repo.cache.SimpleCache; + import org.alfresco.repo.security.permissions.AccessControlEntry; import org.alfresco.repo.security.permissions.AccessControlList; import org.alfresco.repo.security.permissions.processor.PermissionPostProcessor; @@ -55,6 +57,7 @@ import org.alfresco.util.PropertyCheck; import org.apache.commons.lang.StringUtils; import org.springframework.context.ApplicationEvent; + /** * Extends the core permission service implementation allowing the consideration of the read records * permission. @@ -69,6 +72,16 @@ public class ExtendedPermissionServiceImpl extends PermissionServiceImpl /** Writers simple cache */ protected SimpleCache> writersCache; + /** + * Configured Permission mapping. + * + * These strings come from alfresco-global.properties and allow fine tuning of the how permissions are mapped. + * This was added as a fix for MNT-16852 to enhance compatibility with our Outlook Integration. + * + **/ + protected List configuredReadPermissions; + protected List configuredFilePermissions; + /** File plan service */ private FilePlanService filePlanService; @@ -126,6 +139,28 @@ public class ExtendedPermissionServiceImpl extends PermissionServiceImpl this.writersCache = writersCache; } + /** + * Maps the string from the properties file (rm.haspermissionmap.read) + * to the list used in the hasPermission method + * + * @param readMapping the mapping of permissions to ReadRecord + */ + public void setConfiguredReadPermissions(String readMapping) + { + this.configuredReadPermissions = Arrays.asList(readMapping.split(",")); + } + + /** + * Maps the string set in the properties file (rm.haspermissionmap.write) + * to the list used in the hasPermission method + * + * @param fileMapping the mapping of permissions to FileRecord + */ + public void setConfiguredFilePermissions(String fileMapping) + { + this.configuredFilePermissions = Arrays.asList(fileMapping.split(",")); + } + /** * @see org.alfresco.repo.security.permissions.impl.PermissionServiceImpl#onBootstrap(org.springframework.context.ApplicationEvent) */ @@ -170,7 +205,7 @@ public class ExtendedPermissionServiceImpl extends PermissionServiceImpl for (PermissionPostProcessor postProcessor : postProcessors) { // post process permission - result = postProcessor.process(result, nodeRef, perm); + result = postProcessor.process(result, nodeRef, perm, this.configuredReadPermissions, this.configuredReadPermissions); } return result; diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/processor/PermissionPostProcessor.java b/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/processor/PermissionPostProcessor.java index 5740594975..175c5f1392 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/processor/PermissionPostProcessor.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/processor/PermissionPostProcessor.java @@ -27,6 +27,8 @@ package org.alfresco.repo.security.permissions.processor; +import java.util.List; + import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.AccessStatus; @@ -46,7 +48,9 @@ public interface PermissionPostProcessor * @param accessStatus current access status * @param nodeRef node reference * @param perm permission + * * @return {@link AccessStatus} */ - AccessStatus process(AccessStatus accessStatus, NodeRef nodeRef, String perm); + AccessStatus process(AccessStatus accessStatus, NodeRef nodeRef, String perm, + List configuredReadPermissions, List configuredFilePermissions); } From 4fb07179d7e4fe195cb02836b03ff72a4b51f2ee Mon Sep 17 00:00:00 2001 From: David Webster Date: Mon, 24 Oct 2016 17:38:34 +0100 Subject: [PATCH 13/18] MNT-16852: Add in accidentally deleted bean extender --- .../org_alfresco_module_rm/extended-repository-context.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml index 98c60525e9..0c29b1181c 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml @@ -124,6 +124,10 @@ ${rm.haspermissionmap.write} + + + + From 47e87e5ecbe980607d3019466da4cc0fe88df632 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Tue, 25 Oct 2016 16:09:48 +0100 Subject: [PATCH 14/18] Fix very minor issue with Javadoc strings. --- .../impl/ExtendedPermissionServiceImpl.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java index 9d45eaafa2..56219b525c 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java @@ -74,12 +74,16 @@ public class ExtendedPermissionServiceImpl extends PermissionServiceImpl /** * Configured Permission mapping. - * - * These strings come from alfresco-global.properties and allow fine tuning of the how permissions are mapped. + *

+ * This string comes from alfresco-global.properties and allows fine tuning of the how permissions are mapped. * This was added as a fix for MNT-16852 to enhance compatibility with our Outlook Integration. - * - **/ + */ protected List configuredReadPermissions; + /** + * Configured Permission mapping. + *

+ * This string also comes from alfresco-global.properties. + */ protected List configuredFilePermissions; /** File plan service */ From 03839783f8ac58d7f7ecd5adf58b87ab127365c5 Mon Sep 17 00:00:00 2001 From: David Webster Date: Tue, 25 Oct 2016 16:32:56 +0100 Subject: [PATCH 15/18] MNT-16852: Fix merge error. --- .../org_alfresco_module_rm/extended-repository-context.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml index 0c29b1181c..e5264e8139 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/extended-repository-context.xml @@ -114,9 +114,6 @@ - - - ${rm.haspermissionmap.read} From ba2fab69b0eecc88dfa1695d605c23cd52c13e1a Mon Sep 17 00:00:00 2001 From: David Webster Date: Thu, 27 Oct 2016 11:31:03 +0100 Subject: [PATCH 16/18] MNT-16852: Add unit tests for postProcessor permissions configuration --- .../impl/ExtendedPermissionServiceImpl.java | 2 +- ...gementPermissionPostProcessorUnitTest.java | 120 ++++++++++++++++++ ...ExtendedPermissionServiceImplUnitTest.java | 12 +- 3 files changed, 131 insertions(+), 3 deletions(-) create mode 100644 rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java index 56219b525c..82ea78d057 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImpl.java @@ -209,7 +209,7 @@ public class ExtendedPermissionServiceImpl extends PermissionServiceImpl for (PermissionPostProcessor postProcessor : postProcessors) { // post process permission - result = postProcessor.process(result, nodeRef, perm, this.configuredReadPermissions, this.configuredReadPermissions); + result = postProcessor.process(result, nodeRef, perm, this.configuredReadPermissions, this.configuredFilePermissions); } return result; diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java new file mode 100644 index 0000000000..3db8c28aee --- /dev/null +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java @@ -0,0 +1,120 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * - + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * - + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * - + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * - + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ + +package org.alfresco.module.org_alfresco_module_rm.permission; + +import static java.util.Arrays.asList; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +import java.util.List; + +import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; +import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.security.AccessStatus; +import org.alfresco.service.cmr.security.PermissionService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +/** + * Extended permission service implementation unit test + * + * @author David Webster + * @since 2.4.1 + */ +public class RecordsManagementPermissionPostProcessorUnitTest +{ + + private @InjectMocks + RecordsManagementPermissionPostProcessor recordsManagementPermissionPostProcessor = new RecordsManagementPermissionPostProcessor(); + + private @Mock NodeService nodeService; + private @Mock PermissionService permissionService; + + @Before + public void setup() + { + MockitoAnnotations.initMocks(this); + } + + /** + * Given the configured permissions are set + * When hasPermission is called + * Then the correct result is returned + */ + @Test + public void configurePermissionsAllowed() + { + AccessStatus accessStatus = AccessStatus.DENIED; + NodeRef nodeRef = new NodeRef("node://ref/"); + String perm = AlfMock.generateText(); + // permissions includes the perm created above + List configuredReadPermissions = asList("ReadProperties", "ReadChildren", perm); + List configuredFilePermissions = asList("WriteProperties", "AddChildren"); + + when(nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) + .thenReturn(true); + when(permissionService.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS)) + .thenReturn(AccessStatus.ALLOWED); + + AccessStatus result = recordsManagementPermissionPostProcessor.process(accessStatus, nodeRef, perm, configuredReadPermissions, configuredFilePermissions); + + assertEquals(AccessStatus.ALLOWED, result); + } + + /** + * Given the configured permissions are set + * When hasPermission is called + * Then the correct result is returned + */ + @Test + public void configurePermissionsDenied() + { + AccessStatus accessStatus = AccessStatus.DENIED; + NodeRef nodeRef = new NodeRef("node://ref/"); + String perm = AlfMock.generateText(); + // permissions do not include perm created above + List configuredReadPermissions = asList("ReadProperties", "ReadChildren"); + List configuredFilePermissions = asList("WriteProperties", "AddChildren"); + + when(nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT)) + .thenReturn(true); + when(permissionService.hasPermission(nodeRef, RMPermissionModel.READ_RECORDS)) + .thenReturn(AccessStatus.ALLOWED); + + AccessStatus result = recordsManagementPermissionPostProcessor.process(accessStatus, nodeRef, perm, configuredReadPermissions, configuredFilePermissions); + + assertEquals(AccessStatus.DENIED, result); + } +} diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImplUnitTest.java index 0caa350b12..63549b5948 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImplUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/repo/security/permissions/impl/ExtendedPermissionServiceImplUnitTest.java @@ -34,6 +34,8 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import java.util.List; + import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; import org.alfresco.repo.security.permissions.processor.PermissionPostProcessor; @@ -121,15 +123,21 @@ public class ExtendedPermissionServiceImplUnitTest extends BaseUnitTest { NodeRef nodeRef = generateCmContent("anyname"); String perm = AlfMock.generateText(); + List configuredReadPermissions = asList("ReadProperties", "ReadChildren"); + List configuredFilePermissions = asList("WriteProperties", "AddChildren"); + + extendedPermissionServiceImpl.setConfiguredReadPermissions("ReadProperties,ReadChildren"); + extendedPermissionServiceImpl.setConfiguredFilePermissions("WriteProperties,AddChildren"); + when(mockedPermissionProcessorRegistry.getPermissionPostProcessors()) .thenReturn(asList(mockedPermissionPostProcessor)); - when(mockedPermissionPostProcessor.process(AccessStatus.UNDETERMINED, nodeRef, perm)) + when(mockedPermissionPostProcessor.process(AccessStatus.UNDETERMINED, nodeRef, perm, configuredReadPermissions, configuredFilePermissions)) .thenReturn(AccessStatus.ALLOWED); AccessStatus result = extendedPermissionServiceImpl.hasPermission(nodeRef, perm); assertEquals(AccessStatus.ALLOWED, result); - verify(mockedPermissionPostProcessor).process(AccessStatus.UNDETERMINED, nodeRef, perm); + verify(mockedPermissionPostProcessor).process(AccessStatus.UNDETERMINED, nodeRef, perm, configuredReadPermissions, configuredFilePermissions); verify(extendedPermissionServiceImpl).hasPermissionImpl(nodeRef, perm); } } From e50ce58533db3f3d47ad0dd8d3305e44c209d007 Mon Sep 17 00:00:00 2001 From: David Webster Date: Thu, 27 Oct 2016 12:07:31 +0100 Subject: [PATCH 17/18] MNT-16852: Improve commenting --- ...cordsManagementPermissionPostProcessorUnitTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java index 3db8c28aee..553be1decd 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java @@ -70,8 +70,8 @@ public class RecordsManagementPermissionPostProcessorUnitTest /** * Given the configured permissions are set - * When hasPermission is called - * Then the correct result is returned + * When process is called + * Then access is allowed */ @Test public void configurePermissionsAllowed() @@ -94,9 +94,9 @@ public class RecordsManagementPermissionPostProcessorUnitTest } /** - * Given the configured permissions are set - * When hasPermission is called - * Then the correct result is returned + * Given the configured permissions are not set + * When process is called + * Then access is denied */ @Test public void configurePermissionsDenied() From 2d4a62769014e410f3cd12de378d50e01c383637 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Thu, 27 Oct 2016 14:12:14 +0100 Subject: [PATCH 18/18] MNT-16852 Fix unit test comment. --- .../RecordsManagementPermissionPostProcessorUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java index 553be1decd..e578c587e2 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/permission/RecordsManagementPermissionPostProcessorUnitTest.java @@ -48,7 +48,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; /** - * Extended permission service implementation unit test + * Unit tests for {@link RecordsManagementPermissionPostProcessor}. * * @author David Webster * @since 2.4.1