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

View File

@@ -21,6 +21,8 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
private NodeRef record; private NodeRef record;
private NodeRef recordToo; private NodeRef recordToo;
private NodeRef moveRecordCategory;
private NodeRef moveRecordFolder;
@Override @Override
protected boolean isUserTest() protected boolean isUserTest()
@@ -43,6 +45,9 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
record = utils.createRecord(rmFolder, "record.txt"); record = utils.createRecord(rmFolder, "record.txt");
recordToo = utils.createRecord(rmFolder, "recordToo.txt"); recordToo = utils.createRecord(rmFolder, "recordToo.txt");
moveRecordCategory = rmService.createRecordCategory(filePlan, "moveRecordCategory");
moveRecordFolder = rmService.createRecordFolder(moveRecordCategory, "moveRecordFolder");
} }
public void testExtendedReaders() public void testExtendedReaders()
@@ -51,10 +56,10 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
{ {
public Void run() public Void run()
{ {
assertFalse(hasExtendedReadersAspect(filePlan)); assertFalse(extendedSecurityService.hasExtendedReaders(filePlan));
assertFalse(hasExtendedReadersAspect(rmContainer)); assertFalse(extendedSecurityService.hasExtendedReaders(rmContainer));
assertFalse(hasExtendedReadersAspect(rmFolder)); assertFalse(extendedSecurityService.hasExtendedReaders(rmFolder));
assertFalse(hasExtendedReadersAspect(record)); assertFalse(extendedSecurityService.hasExtendedReaders(record));
assertNull(extendedSecurityService.getExtendedReaders(record)); assertNull(extendedSecurityService.getExtendedReaders(record));
@@ -68,10 +73,10 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
testMap.put("monkey", Integer.valueOf(1)); testMap.put("monkey", Integer.valueOf(1));
testMap.put("elephant", Integer.valueOf(1)); testMap.put("elephant", Integer.valueOf(1));
test(filePlan, testMap); checkExtendedReaders(filePlan, testMap);
test(rmContainer, testMap); checkExtendedReaders(rmContainer, testMap);
test(rmFolder, testMap); checkExtendedReaders(rmFolder, testMap);
test(record, testMap); checkExtendedReaders(record, testMap);
Set<String> extendedReadersToo = new HashSet<String>(2); Set<String> extendedReadersToo = new HashSet<String>(2);
extendedReadersToo.add("monkey"); extendedReadersToo.add("monkey");
@@ -88,10 +93,10 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
testMapThree.put("elephant", Integer.valueOf(1)); testMapThree.put("elephant", Integer.valueOf(1));
testMapThree.put("snake", Integer.valueOf(1)); testMapThree.put("snake", Integer.valueOf(1));
test(filePlan, testMapThree); checkExtendedReaders(filePlan, testMapThree);
test(rmContainer, testMapThree); checkExtendedReaders(rmContainer, testMapThree);
test(rmFolder, testMapThree); checkExtendedReaders(rmFolder, testMapThree);
test(recordToo, testMapToo); checkExtendedReaders(recordToo, testMapToo);
// test remove (with no parent inheritance) // test remove (with no parent inheritance)
@@ -105,10 +110,10 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
testMapFour.put("monkey", Integer.valueOf(1)); testMapFour.put("monkey", Integer.valueOf(1));
testMapFour.put("snake", Integer.valueOf(1)); testMapFour.put("snake", Integer.valueOf(1));
test(filePlan, testMapThree); checkExtendedReaders(filePlan, testMapThree);
test(rmContainer, testMapThree); checkExtendedReaders(rmContainer, testMapThree);
test(rmFolder, testMapFour); checkExtendedReaders(rmFolder, testMapFour);
test(recordToo, testMapToo); checkExtendedReaders(recordToo, testMapToo);
// test remove (apply to parents) // test remove (apply to parents)
@@ -121,23 +126,72 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
testMapFour.remove("snake"); testMapFour.remove("snake");
testMapToo.remove("snake"); testMapToo.remove("snake");
test(filePlan, testMapThree); checkExtendedReaders(filePlan, testMapThree);
test(rmContainer, testMapThree); checkExtendedReaders(rmContainer, testMapThree);
test(rmFolder, testMapFour); checkExtendedReaders(rmFolder, testMapFour);
test(recordToo, testMapToo); 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; 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") @SuppressWarnings("unchecked")
private void test(NodeRef nodeRef, Map<String, Integer> testMap) private void checkExtendedReaders(NodeRef nodeRef, Map<String, Integer> testMap)
{ {
assertTrue(hasExtendedReadersAspect(nodeRef)); assertTrue(extendedSecurityService.hasExtendedReaders(nodeRef));
Map<String, Integer> readersMap = (Map<String,Integer>)nodeService.getProperty(nodeRef, PROP_READERS); Map<String, Integer> readersMap = (Map<String,Integer>)nodeService.getProperty(nodeRef, PROP_READERS);
assertNotNull(readersMap); assertNotNull(readersMap);
@@ -154,6 +208,4 @@ public class ExtendedSecurityServiceImplTest extends BaseRMTestCase
assertNotNull(readers); assertNotNull(readers);
assertEquals(testMap.size(), readers.size()); assertEquals(testMap.size(), readers.size());
} }
});
}
} }