diff --git a/source/java/org/alfresco/repo/webdav/MoveMethod.java b/source/java/org/alfresco/repo/webdav/MoveMethod.java index 1d19316b7e..f3afc5b597 100644 --- a/source/java/org/alfresco/repo/webdav/MoveMethod.java +++ b/source/java/org/alfresco/repo/webdav/MoveMethod.java @@ -248,36 +248,20 @@ public class MoveMethod extends HierarchicalMethod else if (sourceParentNodeRef.equals(destParentNodeRef)) { // It is a simple rename operation - try + // MNT-9939 - check overwrite + if (hasOverWrite() && destFileInfo != null && !sourceFileInfo.equals(destFileInfo)) { - // MNT-9939 - check overwrite - if (hasOverWrite() && destFileInfo != null && !sourceFileInfo.equals(destFileInfo)) + if (logger.isDebugEnabled()) { - if (logger.isDebugEnabled()) - { - logger.debug("Destination exists and overwrite is allowed"); - } - - fileFolderService.delete(destFileInfo.getNodeRef()); + logger.debug("Destination exists and overwrite is allowed"); } - fileFolderService.rename(sourceNodeRef, name); - // As per the WebDAV spec, we make sure the node is unlocked once moved - getDAVHelper().getLockService().unlock(sourceNodeRef); - } - catch (AccessDeniedException e) - { - XMLWriter xml = createXMLWriter(); - - Attributes nullAttr = getDAVHelper().getNullAttributes(); - - xml.startElement(WebDAV.DAV_NS, WebDAV.XML_ERROR, WebDAV.XML_NS_ERROR, nullAttr); - // Output error - xml.write(DocumentHelper.createElement(WebDAV.XML_NS_CANNOT_MODIFY_PROTECTED_PROPERTY)); - - xml.endElement(WebDAV.DAV_NS, WebDAV.XML_ERROR, WebDAV.XML_NS_ERROR); - m_response.setStatus(HttpServletResponse.SC_CONFLICT); + fileFolderService.delete(destFileInfo.getNodeRef()); } + + fileFolderService.rename(sourceNodeRef, name); + // As per the WebDAV spec, we make sure the node is unlocked once moved + getDAVHelper().getLockService().unlock(sourceNodeRef); } else { diff --git a/source/test-java/org/alfresco/repo/webdav/MoveMethodTest.java b/source/test-java/org/alfresco/repo/webdav/MoveMethodTest.java index b5ccbea233..952256f61f 100644 --- a/source/test-java/org/alfresco/repo/webdav/MoveMethodTest.java +++ b/source/test-java/org/alfresco/repo/webdav/MoveMethodTest.java @@ -21,7 +21,6 @@ package org.alfresco.repo.webdav; import static org.junit.Assert.fail; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -31,6 +30,7 @@ import java.util.List; import org.alfresco.model.ContentModel; import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; @@ -217,6 +217,16 @@ public class MoveMethodTest verify(mockFileFolderService, never()).create(destParentNodeRef, "dest.doc", ContentModel.TYPE_CONTENT); } + + @Test(expected=AccessDeniedException.class) + public void testMNT_10380_ThrowAccessDeniedExceptionWhenUserLacksPermissions() throws Exception + { + when(mockFileFolderService.rename(sourceNodeRef, "dest.doc")). + thenThrow(new AccessDeniedException("Access denied in test by mockFileFolderService")); + + moveMethod.moveOrCopy(sourceNodeRef, sourceParentNodeRef, destParentNodeRef, "dest.doc"); + } + @Test public void testMNT_9662() {