mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
RM-3074: Inplace move no longer needs to modify extended security
* inplace move no longer needs to store and reset extended security * no need to clear extended security when assoc is removed * a couple of extra checks to inplace move integration test
This commit is contained in:
@@ -42,8 +42,6 @@ import org.alfresco.model.ContentModel;
|
|||||||
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
|
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.model.RecordsManagementModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService;
|
import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedReaderDynamicAuthority;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedWriterDynamicAuthority;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl;
|
import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl;
|
||||||
import org.alfresco.repo.cache.SimpleCache;
|
import org.alfresco.repo.cache.SimpleCache;
|
||||||
import org.alfresco.repo.domain.node.NodeDAO;
|
import org.alfresco.repo.domain.node.NodeDAO;
|
||||||
|
@@ -136,7 +136,7 @@ public class RecordAspect extends AbstractDisposableItem
|
|||||||
Set<String> writers = extendedSecurityService.getExtendedWriters(parent);
|
Set<String> writers = extendedSecurityService.getExtendedWriters(parent);
|
||||||
if (readers != null && readers.size() != 0)
|
if (readers != null && readers.size() != 0)
|
||||||
{
|
{
|
||||||
extendedSecurityService.addExtendedSecurity(thumbnail, readers, writers, false);
|
extendedSecurityService.addExtendedSecurity(thumbnail, readers, writers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -34,13 +34,10 @@ import java.util.Set;
|
|||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.capability.Capability;
|
import org.alfresco.module.org_alfresco_module_rm.capability.Capability;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
|
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.dod5015.DOD5015Model;
|
import org.alfresco.module.org_alfresco_module_rm.dod5015.DOD5015Model;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
|
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.model.RecordsManagementModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService;
|
import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedReaderDynamicAuthority;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedWriterDynamicAuthority;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService;
|
import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService;
|
||||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
|
@@ -30,7 +30,6 @@ package org.alfresco.module.org_alfresco_module_rm.record;
|
|||||||
import static org.alfresco.model.ContentModel.ASPECT_PENDING_DELETE;
|
import static org.alfresco.model.ContentModel.ASPECT_PENDING_DELETE;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
||||||
@@ -173,18 +172,11 @@ public class InplaceRecordServiceImpl extends ServiceBaseImpl implements Inplace
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Get the extended readers/writers
|
|
||||||
Set<String> extendedReaders = extendedSecurityService.getExtendedReaders(nodeRef);
|
|
||||||
Set<String> extendedWriters = extendedSecurityService.getExtendedWriters(nodeRef);
|
|
||||||
|
|
||||||
// Move the record
|
// Move the record
|
||||||
fileFolderService.moveFrom(nodeRef, source, targetNodeRef, null);
|
fileFolderService.moveFrom(nodeRef, source, targetNodeRef, null);
|
||||||
|
|
||||||
// Update the originating location property
|
// Update the originating location property
|
||||||
nodeService.setProperty(nodeRef, PROP_RECORD_ORIGINATING_LOCATION, targetNodeRef);
|
nodeService.setProperty(nodeRef, PROP_RECORD_ORIGINATING_LOCATION, targetNodeRef);
|
||||||
|
|
||||||
// Set the extended readers/writers
|
|
||||||
extendedSecurityService.addExtendedSecurity(nodeRef, extendedReaders, extendedWriters);
|
|
||||||
}
|
}
|
||||||
catch (FileExistsException | FileNotFoundException ex)
|
catch (FileExistsException | FileNotFoundException ex)
|
||||||
{
|
{
|
||||||
|
@@ -253,10 +253,6 @@ public class RecordServiceImpl extends BaseBehaviourBean
|
|||||||
this,
|
this,
|
||||||
"onCreateChildAssociation",
|
"onCreateChildAssociation",
|
||||||
NotificationFrequency.FIRST_EVENT);
|
NotificationFrequency.FIRST_EVENT);
|
||||||
private JavaBehaviour onDeleteDeclaredRecordLink = new JavaBehaviour(
|
|
||||||
this,
|
|
||||||
"onDeleteDeclaredRecordLink",
|
|
||||||
NotificationFrequency.FIRST_EVENT);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param identifierService identifier service
|
* @param identifierService identifier service
|
||||||
@@ -417,11 +413,6 @@ public class RecordServiceImpl extends BaseBehaviourBean
|
|||||||
TYPE_RECORD_FOLDER,
|
TYPE_RECORD_FOLDER,
|
||||||
ContentModel.ASSOC_CONTAINS,
|
ContentModel.ASSOC_CONTAINS,
|
||||||
onCreateChildAssociation);
|
onCreateChildAssociation);
|
||||||
policyComponent.bindAssociationBehaviour(
|
|
||||||
NodeServicePolicies.BeforeDeleteChildAssociationPolicy.QNAME,
|
|
||||||
ContentModel.TYPE_FOLDER,
|
|
||||||
ContentModel.ASSOC_CONTAINS,
|
|
||||||
onDeleteDeclaredRecordLink);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -592,27 +583,6 @@ public class RecordServiceImpl extends BaseBehaviourBean
|
|||||||
}, AuthenticationUtil.getSystemUserName());
|
}, AuthenticationUtil.getSystemUserName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Looking specifically at linked content that was declared a record from a non-rm site.
|
|
||||||
* When the site or the folder that the link was declared in is deleted we need to remove
|
|
||||||
* the extended security property accounts in the tree
|
|
||||||
*
|
|
||||||
* @param childAssocRef
|
|
||||||
*/
|
|
||||||
public void onDeleteDeclaredRecordLink(ChildAssociationRef childAssocRef)
|
|
||||||
{
|
|
||||||
// Is the deleted child association not a primary association?
|
|
||||||
// Does the deleted child association have the rma:recordOriginatingDetails aspect?
|
|
||||||
// Is the parent of the deleted child association a folder (cm:folder)?
|
|
||||||
if (!childAssocRef.isPrimary() &&
|
|
||||||
nodeService.hasAspect(childAssocRef.getChildRef(), ASPECT_RECORD_ORIGINATING_DETAILS) &&
|
|
||||||
nodeService.getType(childAssocRef.getParentRef()).equals(ContentModel.TYPE_FOLDER))
|
|
||||||
{
|
|
||||||
// ..then remove the extended readers and writers up the tree for this remaining node
|
|
||||||
extendedSecurityService.removeAllExtendedSecurity(childAssocRef.getChildRef());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#disablePropertyEditableCheck()
|
* @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#disablePropertyEditableCheck()
|
||||||
*/
|
*/
|
||||||
|
@@ -70,6 +70,9 @@ public class MoveInplaceRecordTest extends BaseRMTestCase
|
|||||||
private Set<String> extendedReadersBeforeMove;
|
private Set<String> extendedReadersBeforeMove;
|
||||||
private Set<String> extendedWritersBeforeMove;
|
private Set<String> extendedWritersBeforeMove;
|
||||||
|
|
||||||
|
// primary parent of record
|
||||||
|
private NodeRef primaryParentBeforeMove;
|
||||||
|
|
||||||
public void given()
|
public void given()
|
||||||
{
|
{
|
||||||
// Create the destination folder
|
// Create the destination folder
|
||||||
@@ -95,6 +98,12 @@ public class MoveInplaceRecordTest extends BaseRMTestCase
|
|||||||
|
|
||||||
extendedReadersBeforeMove = extendedSecurityService.getExtendedReaders(dmDocument);
|
extendedReadersBeforeMove = extendedSecurityService.getExtendedReaders(dmDocument);
|
||||||
extendedWritersBeforeMove = extendedSecurityService.getExtendedWriters(dmDocument);
|
extendedWritersBeforeMove = extendedSecurityService.getExtendedWriters(dmDocument);
|
||||||
|
|
||||||
|
// get the primary parent and assert that it's a record management artifact
|
||||||
|
primaryParentBeforeMove = nodeService.getPrimaryParent(dmDocument).getParentRef();
|
||||||
|
assertTrue("Primary parent of newly created should be a records management artifact.",
|
||||||
|
filePlanService.isFilePlanComponent(primaryParentBeforeMove));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void when()
|
public void when()
|
||||||
@@ -114,12 +123,24 @@ public class MoveInplaceRecordTest extends BaseRMTestCase
|
|||||||
|
|
||||||
public void then()
|
public void then()
|
||||||
{
|
{
|
||||||
|
// assert that the document is still a record
|
||||||
|
assertTrue("After move the document should still be a record.",
|
||||||
|
recordService.isRecord(dmDocument));
|
||||||
|
|
||||||
// Check that the source folder is empty now and the destination folder has the document
|
// Check that the source folder is empty now and the destination folder has the document
|
||||||
assertEquals(0, nodeService.getChildAssocs(dmFolder).size());
|
assertEquals(0, nodeService.getChildAssocs(dmFolder).size());
|
||||||
List<ChildAssociationRef> destinationFolderChildAssocs = nodeService.getChildAssocs(destinationDmFolder);
|
List<ChildAssociationRef> destinationFolderChildAssocs = nodeService.getChildAssocs(destinationDmFolder);
|
||||||
assertEquals(1, destinationFolderChildAssocs.size());
|
assertEquals(1, destinationFolderChildAssocs.size());
|
||||||
assertEquals(dmDocument, destinationFolderChildAssocs.get(0).getChildRef());
|
assertEquals(dmDocument, destinationFolderChildAssocs.get(0).getChildRef());
|
||||||
|
|
||||||
|
// Check that the primary parent of the record has remained unchanged
|
||||||
|
NodeRef primaryParentAfterMove = nodeService.getPrimaryParent(dmDocument).getParentRef();
|
||||||
|
assertTrue("Primary parent of record after inplace move should be a records management artifact.",
|
||||||
|
filePlanService.isFilePlanComponent(primaryParentAfterMove));
|
||||||
|
assertEquals("Primary parent of record after inplace move should remain the same.",
|
||||||
|
primaryParentBeforeMove,
|
||||||
|
primaryParentAfterMove);
|
||||||
|
|
||||||
// Check extended readers/writers
|
// Check extended readers/writers
|
||||||
Set<String> extendedReadersAfterMove = extendedSecurityService.getExtendedReaders(dmDocument);
|
Set<String> extendedReadersAfterMove = extendedSecurityService.getExtendedReaders(dmDocument);
|
||||||
Set<String> extendedWritersAfterMove = extendedSecurityService.getExtendedWriters(dmDocument);
|
Set<String> extendedWritersAfterMove = extendedSecurityService.getExtendedWriters(dmDocument);
|
||||||
|
Reference in New Issue
Block a user