diff --git a/config/alfresco/model/permissionDefinitions.xml b/config/alfresco/model/permissionDefinitions.xml index f7a0eea6c9..84ad844a2e 100644 --- a/config/alfresco/model/permissionDefinitions.xml +++ b/config/alfresco/model/permissionDefinitions.xml @@ -480,6 +480,24 @@ + + + + + + + + + + + + + + + + + + @@ -494,17 +512,6 @@ - - - - - - - - - - - diff --git a/config/alfresco/public-services-security-context.xml b/config/alfresco/public-services-security-context.xml index 4764206686..0d2db80f95 100644 --- a/config/alfresco/public-services-security-context.xml +++ b/config/alfresco/public-services-security-context.xml @@ -691,8 +691,8 @@ org.alfresco.service.cmr.coci.CheckOutCheckInService.checkout=ACL_NODE.0.cm:lockable.CheckOut - org.alfresco.service.cmr.coci.CheckOutCheckInService.checkin=ACL_NODE.0.cm:lockable.CheckIn - org.alfresco.service.cmr.coci.CheckOutCheckInService.cancelCheckout=ACL_NODE.0.cm:lockable.CancelCheckOut + org.alfresco.service.cmr.coci.CheckOutCheckInService.checkin=ACL_NODE.0.cm:workingcopy.CheckIn + org.alfresco.service.cmr.coci.CheckOutCheckInService.cancelCheckout=ACL_NODE.0.cm:workingcopy.CancelCheckOut org.alfresco.service.cmr.coci.CheckOutCheckInService.getWorkingCopy=ACL_NODE.0.sys:base.Read org.alfresco.service.cmr.coci.CheckOutCheckInService.getCheckedOut=ACL_NODE.0.sys:base.Read org.alfresco.service.cmr.coci.CheckOutCheckInService.isWorkingCopy=ACL_NODE.0.sys:base.Read diff --git a/source/test-java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java b/source/test-java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java index a84d08d2e8..2c0efba14b 100644 --- a/source/test-java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java @@ -39,6 +39,7 @@ import org.alfresco.repo.version.VersionModel; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.coci.CheckOutCheckInService; import org.alfresco.service.cmr.lock.LockService; +import org.alfresco.service.cmr.lock.LockType; import org.alfresco.service.cmr.lock.NodeLockedException; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.repository.AssociationRef; @@ -1131,7 +1132,6 @@ public class CheckOutCheckInServiceImplTest extends BaseSpringTest assertTrue(thrown); //////////////////////////////////////////////// - // testing "move" actions with non-owner user // //////////////////////////////////////////////// // create another person @@ -1187,8 +1187,6 @@ public class CheckOutCheckInServiceImplTest extends BaseSpringTest /** * MNT-2641 - *

- * Original cannot be deleted while it is checked out. No one should be able to delete or update the original. */ public void testDeleteUpdateOriginalOfCheckedOutDocument() { @@ -1398,7 +1396,6 @@ public class CheckOutCheckInServiceImplTest extends BaseSpringTest { return nodeService.createNode(parentRef, ContentModel.ASSOC_CONTAINS, QName.createQName(contentName), ContentModel.TYPE_CONTENT).getChildRef(); } - private void createPerson(String userName) { // if user with given user name doesn't already exist then create user @@ -1433,4 +1430,27 @@ public class CheckOutCheckInServiceImplTest extends BaseSpringTest } } + /** + *
+ * Creating node - CheckOut - Add write lock to working copy - Unlock working copy - CancelCheckOut + */ + public void testCancelCheckoutUnlockedWCopy() + { + ServiceRegistry serviceRegistry = (ServiceRegistry)this.applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY); + CheckOutCheckInService securityCOCIService = serviceRegistry.getCheckOutCheckInService(); + NodeRef folderA = createFolder(rootNodeRef, "testMnt9502_" + System.currentTimeMillis()); + assertNotNull(folderA); + NodeRef clucc = createContent("checkout_lock_unlock_cancelCO", folderA); + assertNotNull(clucc); + + NodeRef wc = securityCOCIService.checkout(clucc); + lockService.lock(wc, LockType.WRITE_LOCK, 60*60); + lockService.unlock(wc); + securityCOCIService.cancelCheckout(wc); + } + + private NodeRef createFolder(NodeRef rootNodeRef, String fName) + { + return nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName(fName), ContentModel.TYPE_FOLDER).getChildRef(); + } }