From 5ffcd36aa7abebeff2a6e426eaf833074bb9596c Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Thu, 1 Oct 2009 08:38:39 +0000 Subject: [PATCH] RM: Run copy of permissions as Admin to allow records managers to copy record folders and records git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@16641 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/repo/copy/CopyServiceImpl.java | 46 +++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/source/java/org/alfresco/repo/copy/CopyServiceImpl.java b/source/java/org/alfresco/repo/copy/CopyServiceImpl.java index b3d551e4e5..2930236117 100644 --- a/source/java/org/alfresco/repo/copy/CopyServiceImpl.java +++ b/source/java/org/alfresco/repo/copy/CopyServiceImpl.java @@ -44,6 +44,7 @@ import org.alfresco.repo.copy.CopyBehaviourCallback.CopyChildAssociationDetails; import org.alfresco.repo.policy.ClassPolicyDelegate; import org.alfresco.repo.policy.JavaBehaviour; import org.alfresco.repo.policy.PolicyComponent; +import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.AssociationDefinition; import org.alfresco.service.cmr.dictionary.ChildAssociationDefinition; @@ -687,32 +688,41 @@ public class CopyServiceImpl implements CopyService * @param sourceNodeRef the source node reference * @param destinationNodeRef the destination node reference */ - private void copyPermissions(NodeRef sourceNodeRef, NodeRef destinationNodeRef) + private void copyPermissions(final NodeRef sourceNodeRef, final NodeRef destinationNodeRef) { - if(this.permissionService.hasPermission(sourceNodeRef, PermissionService.READ_PERMISSIONS) == AccessStatus.ALLOWED) + AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork() { - // Get the permission details of the source node reference - Set permissions = this.permissionService.getAllSetPermissions(sourceNodeRef); - boolean includeInherited = this.permissionService.getInheritParentPermissions(sourceNodeRef); - - AccessStatus writePermission = permissionService.hasPermission(destinationNodeRef, PermissionService.CHANGE_PERMISSIONS); - if (writePermission.equals(AccessStatus.ALLOWED) || this.authenticationService.isCurrentUserTheSystemUser() ) + public Object doWork() throws Exception { - // Set the permission values on the destination node - for (AccessPermission permission : permissions) + + if(permissionService.hasPermission(sourceNodeRef, PermissionService.READ_PERMISSIONS) == AccessStatus.ALLOWED) { - if(permission.isSetDirectly()) + // Get the permission details of the source node reference + Set permissions = permissionService.getAllSetPermissions(sourceNodeRef); + boolean includeInherited = permissionService.getInheritParentPermissions(sourceNodeRef); + + AccessStatus writePermission = permissionService.hasPermission(destinationNodeRef, PermissionService.CHANGE_PERMISSIONS); + if (writePermission.equals(AccessStatus.ALLOWED) || authenticationService.isCurrentUserTheSystemUser() ) { - this.permissionService.setPermission( - destinationNodeRef, - permission.getAuthority(), - permission.getPermission(), - permission.getAccessStatus().equals(AccessStatus.ALLOWED)); + // Set the permission values on the destination node + for (AccessPermission permission : permissions) + { + if(permission.isSetDirectly()) + { + permissionService.setPermission( + destinationNodeRef, + permission.getAuthority(), + permission.getPermission(), + permission.getAccessStatus().equals(AccessStatus.ALLOWED)); + } + } + permissionService.setInheritParentPermissions(destinationNodeRef, includeInherited); } } - this.permissionService.setInheritParentPermissions(destinationNodeRef, includeInherited); + + return null; } - } + }, AuthenticationUtil.getAdminUserName()); } /**