RM-555: Add extended reader permissions for records.

* unit tests for move
  * fixes



git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@44065 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Roy Wetherall
2012-11-28 01:03:25 +00:00
parent 3fb6220149
commit 83cd918890
2 changed files with 111 additions and 47 deletions

View File

@@ -260,15 +260,19 @@ public class ExtendedSecurityServiceImpl implements ExtendedSecurityService,
}
/**
* Removes a set of readers from a node reference.
* <p>
* Removes the aspect and resets the property to null if all readers are removed.
*
* @param nodeRef
* @param readers
* @param nodeRef node reference
* @param readers {@link Set} of readers
*/
@SuppressWarnings("unchecked")
private void removeExtendedReadersImpl(NodeRef nodeRef, Set<String> readers)
{
Map<String, Integer> readersMap = (Map<String, Integer>)nodeService.getProperty(nodeRef, PROP_READERS);
// remove the readers
for (String reader : readers)
{
Integer readerCount = readersMap.get(reader);
@@ -276,21 +280,29 @@ public class ExtendedSecurityServiceImpl implements ExtendedSecurityService,
{
if (readerCount == 1)
{
// remove entry all together if the reference count is now 0
readersMap.remove(reader);
}
else
{
// decrement the reference count by 1
readersMap.put(reader, Integer.valueOf(readerCount.intValue()-1));
}
}
}
// reset the map to null if now empty
if (readersMap.isEmpty() == true)
{
readersMap = null;
}
// set the property and remove the aspect if appropriate
nodeService.setProperty(nodeRef, PROP_READERS, (Serializable)readersMap);
if (readersMap == null)
{
nodeService.removeAspect(nodeRef, ASPECT_EXTENDED_READERS);
}
}
/**
@@ -337,7 +349,7 @@ public class ExtendedSecurityServiceImpl implements ExtendedSecurityService,
if (readers != null && readers.size() != 0)
{
setExtendedReaders(newParent, readers);
removeExtendedReadersImpl(oldParent, readers);
removeExtendedReaders(oldParent, readers);
}
return null;

View File

@@ -21,6 +21,8 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
private NodeRef record;
private NodeRef recordToo;
private NodeRef moveRecordCategory;
private NodeRef moveRecordFolder;
@Override
protected boolean isUserTest()
@@ -43,6 +45,9 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
record = utils.createRecord(rmFolder, "record.txt");
recordToo = utils.createRecord(rmFolder, "recordToo.txt");
moveRecordCategory = rmService.createRecordCategory(filePlan, "moveRecordCategory");
moveRecordFolder = rmService.createRecordFolder(moveRecordCategory, "moveRecordFolder");
}
public void testExtendedReaders()
@@ -51,10 +56,10 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
{
public Void run()
{
assertFalse(hasExtendedReadersAspect(filePlan));
assertFalse(hasExtendedReadersAspect(rmContainer));
assertFalse(hasExtendedReadersAspect(rmFolder));
assertFalse(hasExtendedReadersAspect(record));
assertFalse(extendedSecurityService.hasExtendedReaders(filePlan));
assertFalse(extendedSecurityService.hasExtendedReaders(rmContainer));
assertFalse(extendedSecurityService.hasExtendedReaders(rmFolder));
assertFalse(extendedSecurityService.hasExtendedReaders(record));
assertNull(extendedSecurityService.getExtendedReaders(record));
@@ -68,10 +73,10 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
testMap.put("monkey", Integer.valueOf(1));
testMap.put("elephant", Integer.valueOf(1));
test(filePlan, testMap);
test(rmContainer, testMap);
test(rmFolder, testMap);
test(record, testMap);
checkExtendedReaders(filePlan, testMap);
checkExtendedReaders(rmContainer, testMap);
checkExtendedReaders(rmFolder, testMap);
checkExtendedReaders(record, testMap);
Set<String> extendedReadersToo = new HashSet<String>(2);
extendedReadersToo.add("monkey");
@@ -88,10 +93,10 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
testMapThree.put("elephant", Integer.valueOf(1));
testMapThree.put("snake", Integer.valueOf(1));
test(filePlan, testMapThree);
test(rmContainer, testMapThree);
test(rmFolder, testMapThree);
test(recordToo, testMapToo);
checkExtendedReaders(filePlan, testMapThree);
checkExtendedReaders(rmContainer, testMapThree);
checkExtendedReaders(rmFolder, testMapThree);
checkExtendedReaders(recordToo, testMapToo);
// test remove (with no parent inheritance)
@@ -105,10 +110,10 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
testMapFour.put("monkey", Integer.valueOf(1));
testMapFour.put("snake", Integer.valueOf(1));
test(filePlan, testMapThree);
test(rmContainer, testMapThree);
test(rmFolder, testMapFour);
test(recordToo, testMapToo);
checkExtendedReaders(filePlan, testMapThree);
checkExtendedReaders(rmContainer, testMapThree);
checkExtendedReaders(rmFolder, testMapFour);
checkExtendedReaders(recordToo, testMapToo);
// test remove (apply to parents)
@@ -121,39 +126,86 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
testMapFour.remove("snake");
testMapToo.remove("snake");
test(filePlan, testMapThree);
test(rmContainer, testMapThree);
test(rmFolder, testMapFour);
test(recordToo, testMapToo);
checkExtendedReaders(filePlan, testMapThree);
checkExtendedReaders(rmContainer, testMapThree);
checkExtendedReaders(rmFolder, testMapFour);
checkExtendedReaders(recordToo, testMapToo);
return null;
}
});
}
public void testMove()
{
doTestInTransaction(new Test<Void>()
{
Map<String, Integer> testMap = new HashMap<String, Integer>(2);
public Void run() throws Exception
{
testMap.put("monkey", Integer.valueOf(1));
testMap.put("elephant", Integer.valueOf(1));
assertFalse(extendedSecurityService.hasExtendedReaders(filePlan));
assertFalse(extendedSecurityService.hasExtendedReaders(rmContainer));
assertFalse(extendedSecurityService.hasExtendedReaders(rmFolder));
assertFalse(extendedSecurityService.hasExtendedReaders(record));
assertFalse(extendedSecurityService.hasExtendedReaders(moveRecordCategory));
assertFalse(extendedSecurityService.hasExtendedReaders(moveRecordFolder));
assertNull(extendedSecurityService.getExtendedReaders(record));
Set<String> extendedReaders = new HashSet<String>(2);
extendedReaders.add("monkey");
extendedReaders.add("elephant");
extendedSecurityService.setExtendedReaders(record, extendedReaders);
checkExtendedReaders(filePlan, testMap);
checkExtendedReaders(rmContainer, testMap);
checkExtendedReaders(rmFolder, testMap);
checkExtendedReaders(record, testMap);
assertFalse(extendedSecurityService.hasExtendedReaders(moveRecordCategory));
assertFalse(extendedSecurityService.hasExtendedReaders(moveRecordFolder));
fileFolderService.move(record, moveRecordFolder, "movedRecord");
return null;
}
private boolean hasExtendedReadersAspect(NodeRef nodeRef)
@Override
public void test(Void result) throws Exception
{
return nodeService.hasAspect(nodeRef, ASPECT_EXTENDED_READERS);
checkExtendedReaders(filePlan, testMap);
assertFalse(extendedSecurityService.hasExtendedReaders(rmContainer));
assertFalse(extendedSecurityService.hasExtendedReaders(rmFolder));
checkExtendedReaders(moveRecordCategory, testMap);
checkExtendedReaders(moveRecordFolder, testMap);
checkExtendedReaders(record, testMap);
}
});
}
@SuppressWarnings("unchecked")
private void checkExtendedReaders(NodeRef nodeRef, Map<String, Integer> testMap)
{
assertTrue(extendedSecurityService.hasExtendedReaders(nodeRef));
Map<String, Integer> readersMap = (Map<String,Integer>)nodeService.getProperty(nodeRef, PROP_READERS);
assertNotNull(readersMap);
assertEquals(testMap.size(), readersMap.size());
for (Map.Entry<String, Integer> entry: testMap.entrySet())
{
assertTrue(readersMap.containsKey(entry.getKey()));
assertEquals(entry.getKey(), entry.getValue(), readersMap.get(entry.getKey()));
@SuppressWarnings("unchecked")
private void test(NodeRef nodeRef, Map<String, Integer> testMap)
{
assertTrue(hasExtendedReadersAspect(nodeRef));
Map<String, Integer> readersMap = (Map<String,Integer>)nodeService.getProperty(nodeRef, PROP_READERS);
assertNotNull(readersMap);
assertEquals(testMap.size(), readersMap.size());
for (Map.Entry<String, Integer> entry: testMap.entrySet())
{
assertTrue(readersMap.containsKey(entry.getKey()));
assertEquals(entry.getKey(), entry.getValue(), readersMap.get(entry.getKey()));
}
Set<String> readers = extendedSecurityService.getExtendedReaders(nodeRef);
assertNotNull(readers);
assertEquals(testMap.size(), readers.size());
}
});
}
}
Set<String> readers = extendedSecurityService.getExtendedReaders(nodeRef);
assertNotNull(readers);
assertEquals(testMap.size(), readers.size());
}
}