RM-3074: Deleted creators cause failures when declaring records

This commit is contained in:
Roy Wetherall
2016-08-22 15:06:43 +01:00
parent 7d30c1e9b0
commit 3bd4d2d74b
4 changed files with 67 additions and 15 deletions

View File

@@ -518,7 +518,8 @@ public class ExtendedSecurityServiceImpl extends ServiceBaseImpl
{
for (String child : children)
{
if (!PermissionService.ALL_AUTHORITIES.equals(child))
if (authorityService.authorityExists(child) &&
!PermissionService.ALL_AUTHORITIES.equals(child))
{
authorityService.addAuthority(group, child);
}

View File

@@ -374,7 +374,9 @@ public class ExtendedPermissionServiceImpl extends PermissionServiceImpl impleme
// add the current owner to the list of extended writers
Set<String> modifiedWrtiers = new HashSet<String>(writers);
String owner = ownableService.getOwner(nodeRef);
if (StringUtils.isNotBlank(owner) && !owner.equals(OwnableService.NO_OWNER))
if (StringUtils.isNotBlank(owner) &&
!owner.equals(OwnableService.NO_OWNER) &&
authorityService.authorityExists(owner))
{
modifiedWrtiers.add(owner);
}

View File

@@ -45,6 +45,7 @@ import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
import org.alfresco.module.org_alfresco_module_rm.test.util.CommonRMTestUtils;
import org.alfresco.module.org_alfresco_module_rm.test.util.bdt.BehaviourTest;
import org.alfresco.repo.security.permissions.AccessDeniedException;
import org.alfresco.repo.site.SiteModel;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.AccessStatus;
@@ -67,7 +68,9 @@ public class InplaceRecordPermissionTest extends BaseRMTestCase
.collect(Collectors.toList());
/** test data */
NodeRef contribDoc;
private NodeRef contribDoc;
private NodeRef deleteUserDoc;
private String deletedUser;
/** services */
private NodeService dbNodeService;
@@ -770,6 +773,41 @@ public class InplaceRecordPermissionTest extends BaseRMTestCase
;
}
/**
* Given a user is the cm:creator of a document
* And the user is deleted
* When the document is declared as a record by a manager
* Then it succesfully becomes a record
*/
public void testCmCreatorDeletedBeforeRecordDeclaration()
{
test()
.given()
.asAdmin()
.perform(() ->
{
deletedUser = GUID.generate();
createPerson(deletedUser);
siteService.setMembership(collabSiteId, deletedUser, SiteModel.SITE_CONTRIBUTOR);
})
.as(deletedUser)
.perform(() ->
{
deleteUserDoc = fileFolderService.create(dmFolder, "deleteUserDoc.txt" , ContentModel.TYPE_CONTENT).getNodeRef();
dbNodeService.addAspect(deleteUserDoc, ContentModel.ASPECT_AUDITABLE, null);
})
.asAdmin()
.perform(() -> personService.deletePerson(deletedUser))
.when()
.as(dmCollaborator)
.perform(() -> recordService.createRecord(filePlan, deleteUserDoc))
.then()
.expect(true)
.from(() -> recordService.isRecord(deleteUserDoc))
.because("The document is now a record.")
;
}
/**
* Test group reuse
*/
@@ -778,22 +816,16 @@ public class InplaceRecordPermissionTest extends BaseRMTestCase
test()
.when()
.as(dmCollaborator)
.perform(() ->
.perform(50, () ->
{
for (int i = 0; i < 50; i++)
{
NodeRef newDocument = fileFolderService.create(dmFolder, GUID.generate(), ContentModel.TYPE_CONTENT).getNodeRef();
recordService.createRecord(filePlan, newDocument);
}
NodeRef newDocument = fileFolderService.create(dmFolder, GUID.generate(), ContentModel.TYPE_CONTENT).getNodeRef();
recordService.createRecord(filePlan, newDocument);
})
.as(dmContributor)
.perform(() ->
.perform(50, () ->
{
for (int i = 0; i < 50; i++)
{
NodeRef newDocument = fileFolderService.create(dmFolder, GUID.generate(), ContentModel.TYPE_CONTENT).getNodeRef();
recordService.createRecord(filePlan, newDocument);
}
NodeRef newDocument = fileFolderService.create(dmFolder, GUID.generate(), ContentModel.TYPE_CONTENT).getNodeRef();
recordService.createRecord(filePlan, newDocument);
})
.then()
.asAdmin()

View File

@@ -227,6 +227,23 @@ public class BehaviourTest
return new ExpectedFailure(this, exceptionClass);
}
/**
* Perform work a number of times
*
* @param count number of times to perform the work
* @param work work to perform
* @return BehaviourTest test instance
*/
public BehaviourTest perform(int count, Work work)
{
for (int i = 0; i < count; i++)
{
perform(work);
}
return this;
}
/**
* Perform work
*