diff --git a/config/alfresco/core-services-context.xml b/config/alfresco/core-services-context.xml index 09a7212a60..f26d4ba47d 100644 --- a/config/alfresco/core-services-context.xml +++ b/config/alfresco/core-services-context.xml @@ -631,17 +631,11 @@ - - - - + - - - - + @@ -653,10 +647,22 @@ - + - + + + + + + + + + + + + + @@ -828,28 +834,28 @@ - + - + - + - + - + - + - + diff --git a/source/java/org/alfresco/repo/exporter/ExporterComponent.java b/source/java/org/alfresco/repo/exporter/ExporterComponent.java index 2f7f58c720..c99a0a88f8 100644 --- a/source/java/org/alfresco/repo/exporter/ExporterComponent.java +++ b/source/java/org/alfresco/repo/exporter/ExporterComponent.java @@ -41,6 +41,7 @@ import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.security.AccessPermission; import org.alfresco.service.cmr.security.AuthenticationService; import org.alfresco.service.cmr.security.PermissionService; +import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.view.ExportPackageHandler; import org.alfresco.service.cmr.view.Exporter; import org.alfresco.service.cmr.view.ExporterContext; @@ -333,16 +334,20 @@ public class ExporterComponent exporter.endAspects(nodeRef); // Export node permissions - Set permissions = permissionService.getAllSetPermissions(nodeRef); - boolean inheritPermissions = permissionService.getInheritParentPermissions(nodeRef); - if (permissions.size() > 0 || !inheritPermissions) + AccessStatus readPermission = permissionService.hasPermission(nodeRef, PermissionService.READ_PERMISSIONS); + if (readPermission.equals(AccessStatus.ALLOWED)) { - exporter.startACL(nodeRef); - for (AccessPermission permission : permissions) + Set permissions = permissionService.getAllSetPermissions(nodeRef); + boolean inheritPermissions = permissionService.getInheritParentPermissions(nodeRef); + if (permissions.size() > 0 || !inheritPermissions) { - exporter.permission(nodeRef, permission); + exporter.startACL(nodeRef); + for (AccessPermission permission : permissions) + { + exporter.permission(nodeRef, permission); + } + exporter.endACL(nodeRef); } - exporter.endACL(nodeRef); } // Export node properties diff --git a/source/java/org/alfresco/repo/importer/ImporterComponent.java b/source/java/org/alfresco/repo/importer/ImporterComponent.java index 1b619efd6c..84ca2b6ae4 100644 --- a/source/java/org/alfresco/repo/importer/ImporterComponent.java +++ b/source/java/org/alfresco/repo/importer/ImporterComponent.java @@ -53,6 +53,8 @@ import org.alfresco.service.cmr.search.SearchParameters; import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.security.AccessPermission; import org.alfresco.service.cmr.security.AccessStatus; +import org.alfresco.service.cmr.security.AuthorityService; +import org.alfresco.service.cmr.security.OwnableService; import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.view.ImportPackageHandler; import org.alfresco.service.cmr.view.ImporterBinding; @@ -92,6 +94,8 @@ public class ImporterComponent private ContentService contentService; private RuleService ruleService; private PermissionService permissionService; + private AuthorityService authorityService; + private OwnableService ownableService; // binding markers private static final String START_BINDING_MARKER = "${"; @@ -172,7 +176,23 @@ public class ImporterComponent this.permissionService = permissionService; } + /** + * @param authorityService authorityService + */ + public void setAuthorityService(AuthorityService authorityService) + { + this.authorityService = authorityService; + } + /** + * @param ownableService ownableService + */ + public void setOwnableService(OwnableService ownableService) + { + this.ownableService = ownableService; + } + + /* (non-Javadoc) * @see org.alfresco.service.cmr.view.ImporterService#importView(java.io.InputStreamReader, org.alfresco.service.cmr.view.Location, java.util.Properties, org.alfresco.service.cmr.view.ImporterProgress) */ @@ -1031,7 +1051,7 @@ public class ImporterComponent */ private void reportPropertySet(NodeRef nodeRef, Map properties) { - if (progress != null) + if (progress != null && properties != null) { for (QName property : properties.keySet()) { @@ -1048,7 +1068,7 @@ public class ImporterComponent */ private void reportPermissionSet(NodeRef nodeRef, List permissions) { - if (progress != null) + if (progress != null && permissions != null) { for (AccessPermission permission : permissions) { @@ -1115,16 +1135,28 @@ public class ImporterComponent ChildAssociationRef assocRef = nodeService.createNode(parentRef, assocType, childQName, nodeType.getName(), initialProperties); NodeRef nodeRef = assocRef.getChildRef(); - // Apply permissions - boolean inheritPermissions = node.getInheritPermissions(); - if (!inheritPermissions) + // Note: non-admin authorities take ownership of new nodes + if (!authorityService.hasAdminAuthority()) { - permissionService.setInheritParentPermissions(nodeRef, false); + ownableService.takeOwnership(nodeRef); } - List permissions = node.getAccessControlEntries(); - for (AccessPermission permission : permissions) + + // apply permissions + List permissions = null; + AccessStatus writePermission = permissionService.hasPermission(nodeRef, PermissionService.CHANGE_PERMISSIONS); + if (writePermission.equals(AccessStatus.ALLOWED)) { - permissionService.setPermission(nodeRef, permission.getAuthority(), permission.getPermission(), permission.getAccessStatus().equals(AccessStatus.ALLOWED)); + permissions = node.getAccessControlEntries(); + for (AccessPermission permission : permissions) + { + permissionService.setPermission(nodeRef, permission.getAuthority(), permission.getPermission(), permission.getAccessStatus().equals(AccessStatus.ALLOWED)); + } + // note: apply inheritance after setting permissions as this may affect whether you can apply permissions + boolean inheritPermissions = node.getInheritPermissions(); + if (!inheritPermissions) + { + permissionService.setInheritParentPermissions(nodeRef, false); + } } // Disable behaviour for the node until the complete node (and its children have been imported) @@ -1290,15 +1322,20 @@ public class ImporterComponent } // Apply permissions - boolean inheritPermissions = node.getInheritPermissions(); - if (!inheritPermissions) + List permissions = null; + AccessStatus writePermission = permissionService.hasPermission(existingNodeRef, PermissionService.CHANGE_PERMISSIONS); + if (writePermission.equals(AccessStatus.ALLOWED)) { - permissionService.setInheritParentPermissions(existingNodeRef, false); - } - List permissions = node.getAccessControlEntries(); - for (AccessPermission permission : permissions) - { - permissionService.setPermission(existingNodeRef, permission.getAuthority(), permission.getPermission(), permission.getAccessStatus().equals(AccessStatus.ALLOWED)); + boolean inheritPermissions = node.getInheritPermissions(); + if (!inheritPermissions) + { + permissionService.setInheritParentPermissions(existingNodeRef, false); + } + permissions = node.getAccessControlEntries(); + for (AccessPermission permission : permissions) + { + permissionService.setPermission(existingNodeRef, permission.getAuthority(), permission.getPermission(), permission.getAccessStatus().equals(AccessStatus.ALLOWED)); + } } // report update