From 01c58e7955b175f6d97516195f9cd9e7c6245042 Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Sun, 21 Mar 2021 20:32:44 +0100 Subject: [PATCH] TST: more tests for EntityACL stuff --- .../permissions/AbstractEntityACLFactory.java | 1 + .../server/permissions/EntityACLTest.java | 100 ++++++++---------- 2 files changed, 46 insertions(+), 55 deletions(-) diff --git a/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java b/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java index 88247950..c8cd93e4 100644 --- a/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java +++ b/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java @@ -262,6 +262,7 @@ public abstract class AbstractEntityACLFactory<T extends EntityACL> { */ public AbstractEntityACLFactory<T> remove(EntityACL other) { if (other != null) { + normalize(); for (EntityACI aci : other.getRules()) { if (EntityACL.isAllowance(aci.getBitSet())) { if (EntityACL.isPriorityBitSet(aci.getBitSet())) { diff --git a/src/test/java/org/caosdb/server/permissions/EntityACLTest.java b/src/test/java/org/caosdb/server/permissions/EntityACLTest.java index 8e8b0a10..1787c902 100644 --- a/src/test/java/org/caosdb/server/permissions/EntityACLTest.java +++ b/src/test/java/org/caosdb/server/permissions/EntityACLTest.java @@ -22,6 +22,7 @@ */ package org.caosdb.server.permissions; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -349,60 +350,49 @@ public class EntityACLTest { Assert.assertFalse((f.create().isPermitted(user2, EntityPermission.UPDATE_NAME))); } - // @Test - // public void niceFactoryStuff() { - // final EntityACLFactory f = new EntityACLFactory(); - // f.grant("user1", "*"); - // final EntityACL acl1 = f.create(); - // Assert.assertTrue(acl1.isPermitted("user1", EntityPermission.EDIT_ACL)); - // Assert.assertTrue(acl1.isPermitted("user1", EntityPermission.DELETE)); - // Assert.assertTrue(acl1.isPermitted("user1", - // EntityPermission.RETRIEVE_ENTITY)); - // Assert.assertTrue(acl1.isPermitted("user1", - // EntityPermission.UPDATE_DATA_TYPE)); - // Assert.assertTrue(acl1.isPermitted("user1", - // EntityPermission.USE_AS_PROPERTY)); - // - // f.grant("?OWNER?", "DELETE", "EDIT:ACL", "RETRIEVE:*", "UPDATE:*", - // "USE:*"); - // f.grant("user2", "EDIT:ACL"); - // final EntityACL acl2 = f.create(); - // Assert.assertTrue(acl2.isPermitted("user2", EntityPermission.EDIT_ACL)); - // Assert.assertTrue(acl2.isPermitted("user2", EntityPermission.DELETE)); - // Assert.assertTrue(acl2.isPermitted("user2", - // EntityPermission.RETRIEVE_ENTITY)); - // Assert.assertTrue(acl2.isPermitted("user2", - // EntityPermission.UPDATE_DATA_TYPE)); - // Assert.assertTrue(acl2.isPermitted("user2", - // EntityPermission.USE_AS_PROPERTY)); - // - // } - // - // @Test - // public void testDeny() { - // EntityACLFactory f = new EntityACLFactory(); - // f.deny("test", "DELETE"); - // Assert.assertFalse(f.create().isPermitted("test", - // EntityPermission.DELETE)); - // - // System.out.println(Utils.element2String(f.create().toElement())); - // - // System.out.println(Utils.element2String(EntityACL.GLOBAL_PERMISSIONS.toElement())); - // - // f.grant("test", "USE:*"); - // Assert.assertFalse(f.create().isPermitted("test", - // EntityPermission.DELETE)); - // - // System.out.println(Utils.element2String(f.create().toElement())); - // - // f = new EntityACLFactory(); - // f.grant(EntityACL.OTHER_ROLE, "RETRIEVE:*"); - // f.deny(EntityACL.OTHER_ROLE, "DELETE"); - // final EntityACL a = f.create(); - // - // System.out.println(Utils.element2String(a.toElement())); - // - // System.out.println(Utils.element2String(EntityACL.deserialize(a.serialize()).toElement())); - // } + @Test + public void testRemove() { + EntityACLFactory f = new EntityACLFactory(); + f.grant(org.caosdb.server.permissions.Role.create("role1"), false, EntityPermission.DELETE); + f.deny(org.caosdb.server.permissions.Role.create("role2"), false, EntityPermission.EDIT_ACL); + f.grant( + org.caosdb.server.permissions.Role.create("role3"), true, EntityPermission.RETRIEVE_ACL); + f.deny( + org.caosdb.server.permissions.Role.create("role4"), true, EntityPermission.RETRIEVE_ENTITY); + + EntityACL other = f.create(); + + f.grant(org.caosdb.server.permissions.Role.create("role2"), false, EntityPermission.EDIT_ACL); + f.grant( + org.caosdb.server.permissions.Role.create("role5"), false, EntityPermission.RETRIEVE_FILE); + + f.remove(other); // normalize and remove "other" + + EntityACL tester = f.create(); + assertEquals( + "only the very last rule survived, the others have been overriden or removed", + 1, + tester.getRules().size()); + for (EntityACI aci : tester.getRules()) { + assertEquals(aci.getResponsibleAgent(), org.caosdb.server.permissions.Role.create("role5")); + } + } + @Test + public void testNormalize() { + EntityACLFactory f = new EntityACLFactory(); + f.grant(org.caosdb.server.permissions.Role.create("role1"), false, EntityPermission.DELETE); + f.deny(org.caosdb.server.permissions.Role.create("role1"), false, EntityPermission.DELETE); + f.grant(org.caosdb.server.permissions.Role.create("role1"), true, EntityPermission.DELETE); + f.deny(org.caosdb.server.permissions.Role.create("role1"), true, EntityPermission.DELETE); + + // priority denail overrides everything else + EntityACL denyDelete = f.create(); + assertEquals(1, denyDelete.getRules().size()); + for (EntityACI aci : denyDelete.getRules()) { + assertEquals(org.caosdb.server.permissions.Role.create("role1"), aci.getResponsibleAgent()); + assertTrue(EntityACL.isDenial(aci.getBitSet())); + assertTrue(EntityACL.isPriorityBitSet(aci.getBitSet())); + } + } } -- GitLab