|
@@ -6,11 +6,10 @@ import junit.framework.Assert;
|
|
|
import net.sf.ehcache.Ehcache;
|
|
|
|
|
|
import org.junit.After;
|
|
|
+import org.junit.AfterClass;
|
|
|
import org.junit.Before;
|
|
|
import org.junit.BeforeClass;
|
|
|
import org.junit.Test;
|
|
|
-import org.junit.AfterClass;
|
|
|
-
|
|
|
import org.springframework.context.ApplicationContext;
|
|
|
import org.springframework.core.io.ClassPathResource;
|
|
|
import org.springframework.core.io.Resource;
|
|
@@ -19,6 +18,7 @@ import org.springframework.security.GrantedAuthority;
|
|
|
import org.springframework.security.GrantedAuthorityImpl;
|
|
|
import org.springframework.security.MockApplicationContext;
|
|
|
import org.springframework.security.TestDataSource;
|
|
|
+import org.springframework.security.acls.Acl;
|
|
|
import org.springframework.security.acls.AuditableAccessControlEntry;
|
|
|
import org.springframework.security.acls.MutableAcl;
|
|
|
import org.springframework.security.acls.domain.AclAuthorizationStrategy;
|
|
@@ -28,6 +28,7 @@ import org.springframework.security.acls.domain.ConsoleAuditLogger;
|
|
|
import org.springframework.security.acls.objectidentity.ObjectIdentity;
|
|
|
import org.springframework.security.acls.objectidentity.ObjectIdentityImpl;
|
|
|
import org.springframework.security.acls.sid.PrincipalSid;
|
|
|
+import org.springframework.security.acls.sid.Sid;
|
|
|
import org.springframework.util.FileCopyUtils;
|
|
|
|
|
|
/**
|
|
@@ -42,7 +43,7 @@ public class BasicLookupStrategyTests {
|
|
|
|
|
|
private static TestDataSource dataSource;
|
|
|
|
|
|
- //~ Methods ========================================================================================================
|
|
|
+ // ~ Methods ========================================================================================================
|
|
|
|
|
|
@BeforeClass
|
|
|
public static void createDatabase() throws Exception {
|
|
@@ -57,7 +58,7 @@ public class BasicLookupStrategyTests {
|
|
|
@AfterClass
|
|
|
public static void dropDatabase() throws Exception {
|
|
|
dataSource.destroy();
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
@Before
|
|
|
public void populateDatabase() {
|
|
@@ -84,7 +85,9 @@ public class BasicLookupStrategyTests {
|
|
|
|
|
|
@After
|
|
|
public void emptyDatabase() {
|
|
|
- String query = "DELETE FROM acl_entry;" + "DELETE FROM acl_object_identity WHERE ID = 3;"
|
|
|
+ String query = "DELETE FROM acl_entry;" + "DELETE FROM acl_object_identity WHERE ID = 7;"
|
|
|
+ + "DELETE FROM acl_object_identity WHERE ID = 6;" + "DELETE FROM acl_object_identity WHERE ID = 5;"
|
|
|
+ + "DELETE FROM acl_object_identity WHERE ID = 4;" + "DELETE FROM acl_object_identity WHERE ID = 3;"
|
|
|
+ "DELETE FROM acl_object_identity WHERE ID = 2;" + "DELETE FROM acl_object_identity WHERE ID = 1;"
|
|
|
+ "DELETE FROM acl_class;" + "DELETE FROM acl_sid;";
|
|
|
jdbcTemplate.execute(query);
|
|
@@ -199,4 +202,91 @@ public class BasicLookupStrategyTests {
|
|
|
Assert.assertFalse(((AuditableAccessControlEntry) child.getEntries()[0]).isAuditSuccess());
|
|
|
Assert.assertFalse(((AuditableAccessControlEntry) child.getEntries()[0]).isGranting());
|
|
|
}
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testAllParentsAreRetrievedWhenChildIsLoaded() throws Exception {
|
|
|
+ String query = "INSERT INTO acl_object_identity(ID,OBJECT_ID_CLASS,OBJECT_ID_IDENTITY,PARENT_OBJECT,OWNER_SID,ENTRIES_INHERITING) VALUES (4,2,103,1,1,1);";
|
|
|
+ jdbcTemplate.execute(query);
|
|
|
+
|
|
|
+ ObjectIdentity topParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
|
|
|
+ ObjectIdentity middleParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(101));
|
|
|
+ ObjectIdentity childOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(102));
|
|
|
+ ObjectIdentity middleParent2Oid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(103));
|
|
|
+
|
|
|
+ // Retrieve the child
|
|
|
+ Map map = this.strategy.readAclsById(new ObjectIdentity[] { childOid }, null);
|
|
|
+
|
|
|
+ // Check that the child and all its parents were retrieved
|
|
|
+ Assert.assertNotNull(map.get(childOid));
|
|
|
+ Assert.assertEquals(childOid, ((Acl) map.get(childOid)).getObjectIdentity());
|
|
|
+ Assert.assertNotNull(map.get(middleParentOid));
|
|
|
+ Assert.assertEquals(middleParentOid, ((Acl) map.get(middleParentOid)).getObjectIdentity());
|
|
|
+ Assert.assertNotNull(map.get(topParentOid));
|
|
|
+ Assert.assertEquals(topParentOid, ((Acl) map.get(topParentOid)).getObjectIdentity());
|
|
|
+
|
|
|
+ // The second parent shouldn't have been retrieved
|
|
|
+ Assert.assertNull(map.get(middleParent2Oid));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Test created from SEC-590.
|
|
|
+ */
|
|
|
+/* @Test
|
|
|
+ public void testReadAllObjectIdentitiesWhenLastElementIsAlreadyCached() throws Exception {
|
|
|
+ String query = "INSERT INTO acl_object_identity(ID,OBJECT_ID_CLASS,OBJECT_ID_IDENTITY,PARENT_OBJECT,OWNER_SID,ENTRIES_INHERITING) VALUES (4,2,104,null,1,1);"
|
|
|
+ + "INSERT INTO acl_object_identity(ID,OBJECT_ID_CLASS,OBJECT_ID_IDENTITY,PARENT_OBJECT,OWNER_SID,ENTRIES_INHERITING) VALUES (5,2,105,4,1,1);"
|
|
|
+ + "INSERT INTO acl_object_identity(ID,OBJECT_ID_CLASS,OBJECT_ID_IDENTITY,PARENT_OBJECT,OWNER_SID,ENTRIES_INHERITING) VALUES (6,2,106,4,1,1);"
|
|
|
+ + "INSERT INTO acl_object_identity(ID,OBJECT_ID_CLASS,OBJECT_ID_IDENTITY,PARENT_OBJECT,OWNER_SID,ENTRIES_INHERITING) VALUES (7,2,107,5,1,1);"
|
|
|
+ + "INSERT INTO acl_entry(ID,ACL_OBJECT_IDENTITY,ACE_ORDER,SID,MASK,GRANTING,AUDIT_SUCCESS,AUDIT_FAILURE) VALUES (5,4,0,1,1,1,0,0)";
|
|
|
+ jdbcTemplate.execute(query);
|
|
|
+
|
|
|
+ ObjectIdentity grandParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(104));
|
|
|
+ ObjectIdentity parent1Oid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(105));
|
|
|
+ ObjectIdentity parent2Oid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(106));
|
|
|
+ ObjectIdentity childOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(107));
|
|
|
+
|
|
|
+ // First lookup only child, thus populating the cache with grandParent, parent1 and child
|
|
|
+ Permission[] checkPermission = new Permission[] { BasePermission.READ };
|
|
|
+ Sid[] sids = new Sid[] { new PrincipalSid("ben") };
|
|
|
+ ObjectIdentity[] childOids = new ObjectIdentity[] { childOid };
|
|
|
+
|
|
|
+ ((BasicLookupStrategy) this.strategy).setBatchSize(6);
|
|
|
+ Map foundAcls = strategy.readAclsById(childOids, sids);
|
|
|
+
|
|
|
+ Acl foundChildAcl = (Acl) foundAcls.get(childOid);
|
|
|
+ Assert.assertNotNull(foundChildAcl);
|
|
|
+ Assert.assertTrue(foundChildAcl.isGranted(checkPermission, sids, false));
|
|
|
+
|
|
|
+ // Search for object identities has to be done in the following order: last element have to be one which
|
|
|
+ // is already in cache and the element before it must not be stored in cache
|
|
|
+ ObjectIdentity[] allOids = new ObjectIdentity[] { grandParentOid, parent1Oid, parent2Oid, childOid };
|
|
|
+ try {
|
|
|
+ foundAcls = strategy.readAclsById(allOids, sids);
|
|
|
+ Assert.assertTrue(true);
|
|
|
+ } catch (NotFoundException notExpected) {
|
|
|
+ Assert.fail("It shouldn't have thrown NotFoundException");
|
|
|
+ }
|
|
|
+
|
|
|
+ Acl foundParent2Acl = (Acl) foundAcls.get(parent2Oid);
|
|
|
+ Assert.assertNotNull(foundParent2Acl);
|
|
|
+ Assert.assertTrue(foundParent2Acl.isGranted(checkPermission, sids, false));
|
|
|
+ }*/
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testAclsWithDifferentSerializableTypesAsObjectIdentities() throws Exception {
|
|
|
+ String query = "INSERT INTO acl_object_identity(ID,OBJECT_ID_CLASS,OBJECT_ID_IDENTITY,PARENT_OBJECT,OWNER_SID,ENTRIES_INHERITING) VALUES (4,2,104,null,1,1);"
|
|
|
+ + "INSERT INTO acl_entry(ID,ACL_OBJECT_IDENTITY,ACE_ORDER,SID,MASK,GRANTING,AUDIT_SUCCESS,AUDIT_FAILURE) VALUES (5,4,0,1,1,1,0,0)";
|
|
|
+ jdbcTemplate.execute(query);
|
|
|
+
|
|
|
+ ObjectIdentity oid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Integer(104));
|
|
|
+ Sid[] sids = new Sid[] { new PrincipalSid("ben") };
|
|
|
+ ObjectIdentity[] childOids = new ObjectIdentity[] { oid };
|
|
|
+
|
|
|
+ try {
|
|
|
+ Map foundAcls = strategy.readAclsById(childOids, sids);
|
|
|
+ Assert.fail("It should have thrown IllegalArgumentException");
|
|
|
+ } catch(IllegalArgumentException expected) {
|
|
|
+ Assert.assertTrue(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|