From 202e89bf0eaaa723a4b794b8102374713c510304 Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Fri, 19 Mar 2021 20:13:32 +0100 Subject: [PATCH] fix tests --- .../caosdb/server/entity/UpdateEntity.java | 18 +++++++++++++++++ .../permissions/AbstractEntityACLFactory.java | 20 +++++++++++++++---- .../server/transaction/WriteTransaction.java | 19 +++--------------- 3 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/caosdb/server/entity/UpdateEntity.java b/src/main/java/org/caosdb/server/entity/UpdateEntity.java index aa6d5916..884632b5 100644 --- a/src/main/java/org/caosdb/server/entity/UpdateEntity.java +++ b/src/main/java/org/caosdb/server/entity/UpdateEntity.java @@ -22,11 +22,21 @@ */ package org.caosdb.server.entity; +import org.caosdb.server.transaction.WriteTransaction; import org.caosdb.server.utils.EntityStatus; import org.jdom2.Element; +/** + * UpdateEntity class represents entities which are to be updated. The previous version is appeded + * during the {@link WriteTransaction} transactions initialization. + * + * @author Timm Fitschen (t.fitschen@indiscale.com) + */ public class UpdateEntity extends WritableEntity { + /** The previous version of this entity. */ + private EntityInterface original = null; + public UpdateEntity(final Element element) { super(element); } @@ -35,4 +45,12 @@ public class UpdateEntity extends WritableEntity { public boolean skipJob() { return getEntityStatus() != EntityStatus.QUALIFIED; } + + public void setOriginal(EntityInterface original) { + this.original = original; + } + + public EntityInterface getOriginal() { + return this.original; + } } diff --git a/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java b/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java index 675d65dc..7d7120eb 100644 --- a/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java +++ b/src/main/java/org/caosdb/server/permissions/AbstractEntityACLFactory.java @@ -242,13 +242,19 @@ public abstract class AbstractEntityACLFactory<T extends EntityACL> { for (EntityACI aci : permissions.getRules()) { if (EntityACL.isAllowance(aci.getBitSet())) { if (EntityACL.isPriorityBitSet(aci.getBitSet())) { - long bitset = this.priorityGrants.get(aci.getResponsibleAgent()); + Long bitset = this.priorityGrants.get(aci.getResponsibleAgent()); + if (bitset == null) { + continue; + } long bitset2 = bitset; bitset2 &= aci.getBitSet(); bitset ^= bitset2; this.priorityGrants.put(aci.getResponsibleAgent(), bitset); } else { - long bitset = this.normalGrants.get(aci.getResponsibleAgent()); + Long bitset = this.normalGrants.get(aci.getResponsibleAgent()); + if (bitset == null) { + continue; + } long bitset2 = bitset; bitset2 &= aci.getBitSet(); bitset ^= bitset2; @@ -256,13 +262,19 @@ public abstract class AbstractEntityACLFactory<T extends EntityACL> { } } else { if (EntityACL.isPriorityBitSet(aci.getBitSet())) { - long bitset = this.priorityDenials.get(aci.getResponsibleAgent()); + Long bitset = this.priorityDenials.get(aci.getResponsibleAgent()); + if (bitset == null) { + continue; + } long bitset2 = bitset; bitset2 &= aci.getBitSet(); bitset ^= bitset2; this.priorityDenials.put(aci.getResponsibleAgent(), bitset); } else { - long bitset = this.normalDenials.get(aci.getResponsibleAgent()); + Long bitset = this.normalDenials.get(aci.getResponsibleAgent()); + if (bitset == null) { + continue; + } long bitset2 = bitset; bitset2 &= aci.getBitSet(); bitset ^= bitset2; diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java index 87e15e92..570fce2c 100644 --- a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java +++ b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java @@ -285,7 +285,9 @@ public class WriteTransaction extends Transaction<WritableContainer> protected void preCheck() throws InterruptedException, Exception { for (final EntityInterface entity : getContainer()) { try { - checkPermissions(entity, deriveUpdate(entity, ((UpdateEntity) entity).getOriginal())); + if (entity.getEntityStatus() == EntityStatus.QUALIFIED) { + checkPermissions(entity, deriveUpdate(entity, ((UpdateEntity) entity).getOriginal())); + } } catch (final AuthorizationException exc) { entity.setEntityStatus(EntityStatus.UNQUALIFIED); entity.addError(ServerMessages.AUTHORIZATION_ERROR); @@ -377,21 +379,6 @@ public class WriteTransaction extends Transaction<WritableContainer> newEntity.setEntityACL(oldEntity.getEntityACL()); } - // new acl? - if (newEntity.hasEntityACL() && !newEntity.getEntityACL().equals(oldEntity.getEntityACL())) { - oldEntity.checkPermission(EntityPermission.EDIT_ACL); - if (!newEntity - .getEntityACL() - .getPriorityEntityACL() - .equals(oldEntity.getEntityACL().getPriorityEntityACL())) { - // priority acl is to be changed? - oldEntity.checkPermission(Permission.EDIT_PRIORITY_ACL); - } - updatetable = true; - } else if (!newEntity.hasEntityACL()) { - newEntity.setEntityACL(oldEntity.getEntityACL()); - } - // new query template definition? if (!Objects.equals( newEntity.getQueryTemplateDefinition(), oldEntity.getQueryTemplateDefinition())) { -- GitLab