Skip to content
Snippets Groups Projects
Verified Commit 47917414 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

WIP: fix getOwner

parent dbe43993
No related branches found
No related tags found
1 merge request!47fix caosdb-deploy#225
/*
* ** header v3.0
* This file is a part of the CaosDB Project.
*
* Copyright (C) 2018 Research Group Biomedical Physics,
* Max-Planck-Institute for Dynamics and Self-Organization Göttingen
* Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
* Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
......@@ -18,11 +19,12 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* ** end header
*/
package org.caosdb.server.permissions;
import java.util.HashMap;
import java.util.Set;
public final class EntityACI {
......@@ -72,4 +74,16 @@ public final class EntityACI {
map.put("bitSet", getBitSet());
return map;
}
public boolean isGrant() {
return EntityACL.isAllowance(bitSet);
}
public boolean isPriority() {
return EntityACL.isPriorityBitSet(bitSet);
}
public Set<EntityPermission> getPermission() {
return EntityACL.getPermissionsFromBitSet(bitSet);
}
}
......@@ -191,7 +191,9 @@ public class EntityACL {
public static final List<ResponsibleAgent> getOwners(final Collection<EntityACI> acl) {
final List<ResponsibleAgent> owners = new ArrayList<>();
for (final EntityACI aci : acl) {
if (isOwnerBitSet(aci.getBitSet()) && !aci.getResponsibleAgent().equals(OWNER_ROLE)) {
if (aci.isGrant()
&& isOwnerBitSet(aci.getBitSet())
&& !aci.getResponsibleAgent().equals(OWNER_ROLE)) {
owners.add(aci.getResponsibleAgent());
}
}
......
......@@ -23,6 +23,7 @@
package org.caosdb.server.permissions;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
......@@ -30,6 +31,7 @@ import java.io.IOException;
import java.util.BitSet;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.caosdb.server.CaosDBServer;
......@@ -395,4 +397,37 @@ public class EntityACLTest {
assertTrue(EntityACL.isPriorityBitSet(aci.getBitSet()));
}
}
@Test
public void testOwnership() {
EntityACLFactory f = new EntityACLFactory();
f.grant(
org.caosdb.server.permissions.Role.create("the_owner"), false, EntityPermission.EDIT_ACL);
f.deny(
org.caosdb.server.permissions.Role.create("someone_else"),
false,
EntityPermission.EDIT_ACL);
EntityACL acl = f.create();
assertEquals(1, acl.getOwners().size());
assertEquals("the_owner", acl.getOwners().get(0).toString());
}
@Test
public void testPermissionsFor() {
EntityACLFactory f = new EntityACLFactory();
f.deny(org.caosdb.server.permissions.Role.ANONYMOUS_ROLE, false, EntityPermission.EDIT_ACL);
f.grant(org.caosdb.server.permissions.Role.OWNER_ROLE, false, "*");
EntityACL acl = f.create();
Subject anonymous = SecurityUtils.getSubject();
anonymous.login(AnonymousAuthenticationToken.getInstance());
assertTrue(AuthenticationUtils.isAnonymous(anonymous));
assertNotNull(acl);
assertTrue(acl.getOwners().isEmpty());
final Set<EntityPermission> permissionsFor =
EntityACL.getPermissionsFor(anonymous, acl.getRules());
assertFalse(permissionsFor.contains(EntityPermission.RETRIEVE_ENTITY));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment