mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
RM-3074: Deleted creators cause failures when declaring records
This commit is contained in:
@@ -518,7 +518,8 @@ public class ExtendedSecurityServiceImpl extends ServiceBaseImpl
|
|||||||
{
|
{
|
||||||
for (String child : children)
|
for (String child : children)
|
||||||
{
|
{
|
||||||
if (!PermissionService.ALL_AUTHORITIES.equals(child))
|
if (authorityService.authorityExists(child) &&
|
||||||
|
!PermissionService.ALL_AUTHORITIES.equals(child))
|
||||||
{
|
{
|
||||||
authorityService.addAuthority(group, child);
|
authorityService.addAuthority(group, child);
|
||||||
}
|
}
|
||||||
|
@@ -374,7 +374,9 @@ public class ExtendedPermissionServiceImpl extends PermissionServiceImpl impleme
|
|||||||
// add the current owner to the list of extended writers
|
// add the current owner to the list of extended writers
|
||||||
Set<String> modifiedWrtiers = new HashSet<String>(writers);
|
Set<String> modifiedWrtiers = new HashSet<String>(writers);
|
||||||
String owner = ownableService.getOwner(nodeRef);
|
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);
|
modifiedWrtiers.add(owner);
|
||||||
}
|
}
|
||||||
|
@@ -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.CommonRMTestUtils;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.test.util.bdt.BehaviourTest;
|
import org.alfresco.module.org_alfresco_module_rm.test.util.bdt.BehaviourTest;
|
||||||
import org.alfresco.repo.security.permissions.AccessDeniedException;
|
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.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.cmr.security.AccessStatus;
|
import org.alfresco.service.cmr.security.AccessStatus;
|
||||||
@@ -67,7 +68,9 @@ public class InplaceRecordPermissionTest extends BaseRMTestCase
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
/** test data */
|
/** test data */
|
||||||
NodeRef contribDoc;
|
private NodeRef contribDoc;
|
||||||
|
private NodeRef deleteUserDoc;
|
||||||
|
private String deletedUser;
|
||||||
|
|
||||||
/** services */
|
/** services */
|
||||||
private NodeService dbNodeService;
|
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
|
* Test group reuse
|
||||||
*/
|
*/
|
||||||
@@ -778,22 +816,16 @@ public class InplaceRecordPermissionTest extends BaseRMTestCase
|
|||||||
test()
|
test()
|
||||||
.when()
|
.when()
|
||||||
.as(dmCollaborator)
|
.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)
|
.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()
|
.then()
|
||||||
.asAdmin()
|
.asAdmin()
|
||||||
|
@@ -227,6 +227,23 @@ public class BehaviourTest
|
|||||||
return new ExpectedFailure(this, exceptionClass);
|
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
|
* Perform work
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user