public void testCreateObjectsWithAcl()
{
// create a document with initial ACL
String docId = createDocumentWithAcls("complexDocument", fRootFolderId, UnitTestTypeSystemCreator.COMPLEX_TYPE,
addAcl, defaultAcl);
Acl acl1 = fAclSvc.getAcl(fRepositoryId, docId, true, null);
assertTrue(aclEquals(addAcl, acl1));
// create a folder with initial ACL
String folderId = createFolderWithAcls("folderWithAcl", fRootFolderId, BaseTypeId.CMIS_FOLDER.value(),
addAcl, defaultAcl);
Acl acl2 = fAclSvc.getAcl(fRepositoryId, folderId, true, null);
assertTrue(aclEquals(addAcl, acl2));
// add acl later
String docId2 = createVersionedDocument("complexDocument2", fRootFolderId);
Acl acl = fAclSvc.applyAcl(fRepositoryId, docId2, addAcl, defaultAcl, AclPropagation.OBJECTONLY, null);
assertTrue(aclEquals(addAcl, acl));
String folderId2 = createFolder("folder2", fRootFolderId, "cmis:folder");
acl2 = fAclSvc.applyAcl(fRepositoryId, folderId2, addAcl, defaultAcl, AclPropagation.OBJECTONLY, null);
assertTrue(aclEquals(addAcl, acl2));
// add a subfolder
String subFolderId = createFolder("subFolder", folderId, BaseTypeId.CMIS_FOLDER.value());
// folder should inherit acl
Acl subAcl = fAclSvc.getAcl(fRepositoryId, subFolderId, true, null);
assertTrue(aclEquals(addAcl, subAcl));
// add a document
String subDocId = createVersionedDocument("subDoc", subFolderId);
// document should inherit acl
Acl subAclDoc = fAclSvc.getAcl(fRepositoryId, subDocId, true, null);
assertTrue(aclEquals(addAcl, subAclDoc));
// remove an ace, no permission is left for TestUser
Acl removeAcl = createAcl("TestUser", EnumBasicPermissions.CMIS_WRITE);
Acl acl3 = fAclSvc.applyAcl(fRepositoryId, docId2, null, removeAcl, AclPropagation.OBJECTONLY, null);
List<Ace> compareRemoveACEs = new ArrayList<Ace>(3);
compareRemoveACEs.add(createAce("TestAdmin", EnumBasicPermissions.CMIS_ALL));
compareRemoveACEs.add(createAce("Writer", EnumBasicPermissions.CMIS_WRITE));
compareRemoveACEs.add(createAce("Reader", EnumBasicPermissions.CMIS_READ));
Acl compareRemoveAcl = fFactory.createAccessControlList(compareRemoveACEs);
assertTrue(aclEquals(compareRemoveAcl, acl3));
// addACE not propagated
Acl addPropAcl = createAcl("TestUser", EnumBasicPermissions.CMIS_WRITE);
Acl acl4 = fAclSvc.applyAcl(fRepositoryId, subFolderId, addPropAcl, null, AclPropagation.OBJECTONLY, null);
Acl subAclDoc2 = fAclSvc.getAcl(fRepositoryId, subDocId, true, null);
assertTrue(aclEquals(addAcl, subAclDoc2)); // acl of doc did not change
List<Ace> compareRemoveACEs2 = new ArrayList<Ace>(4);
compareRemoveACEs2.add(createAce("TestAdmin", EnumBasicPermissions.CMIS_ALL));
compareRemoveACEs2.add(createAce("Writer", EnumBasicPermissions.CMIS_WRITE));
compareRemoveACEs2.add(createAce("TestUser", EnumBasicPermissions.CMIS_ALL));
compareRemoveACEs2.add(createAce("Reader", EnumBasicPermissions.CMIS_READ));
Acl compareRemoveAcl2 = fFactory.createAccessControlList(compareRemoveACEs2);
assertTrue(aclEquals(compareRemoveAcl2, acl4));
// addACE propagated
Acl acl5 = fAclSvc.applyAcl(fRepositoryId, subFolderId, addPropAcl, null, AclPropagation.PROPAGATE, null);
Acl subAclDoc3 = fAclSvc.getAcl(fRepositoryId, subDocId, true, null);
assertTrue(aclEquals(compareRemoveAcl2, subAclDoc3)); // acl of doc did change
assertTrue(aclEquals(compareRemoveAcl2, acl5));
}