From 09f53f64594cbb15f3b3471b9c67110655361842 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Fri, 4 Dec 2020 04:32:45 +0100
Subject: [PATCH] WIP: state change permissions

---
 src/main/java/org/caosdb/server/permissions/EntityACL.java | 4 +++-
 src/main/java/org/caosdb/server/transaction/Update.java    | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/caosdb/server/permissions/EntityACL.java b/src/main/java/org/caosdb/server/permissions/EntityACL.java
index 5adaca78..9c2fa6c7 100644
--- a/src/main/java/org/caosdb/server/permissions/EntityACL.java
+++ b/src/main/java/org/caosdb/server/permissions/EntityACL.java
@@ -253,7 +253,9 @@ public class EntityACL {
   public final Element toElement() {
     final Element ret = new Element("EntityACL");
 
-    for (final EntityACI aci : this.acl) {
+    final List<EntityACI> localAcl = new ArrayList<>(this.acl);
+    localAcl.addAll(GLOBAL_PERMISSIONS.acl);
+    for (final EntityACI aci : localAcl) {
       final boolean isDenial = isDenial(aci.getBitSet());
       final boolean isPriority = isPriorityBitSet(aci.getBitSet());
       final Element e = new Element(isDenial ? "Deny" : "Grant");
diff --git a/src/main/java/org/caosdb/server/transaction/Update.java b/src/main/java/org/caosdb/server/transaction/Update.java
index 894728cc..75ec7532 100644
--- a/src/main/java/org/caosdb/server/transaction/Update.java
+++ b/src/main/java/org/caosdb/server/transaction/Update.java
@@ -40,6 +40,7 @@ import org.caosdb.server.entity.FileProperties;
 import org.caosdb.server.entity.RetrieveEntity;
 import org.caosdb.server.entity.container.TransactionContainer;
 import org.caosdb.server.entity.container.UpdateContainer;
+import org.caosdb.server.entity.wrapper.EntityWrapper;
 import org.caosdb.server.entity.wrapper.Parent;
 import org.caosdb.server.entity.wrapper.Property;
 import org.caosdb.server.permissions.EntityPermission;
@@ -239,7 +240,8 @@ public class Update extends WriteTransaction<UpdateContainer> {
     }
 
     // entity role
-    if (newEntity.hasRole()
+    if (!(newEntity instanceof EntityWrapper)
+            && newEntity.hasRole()
             && oldEntity.hasRole()
             && !newEntity.getRole().equals(oldEntity.getRole())
         || newEntity.hasRole() ^ oldEntity.hasRole()) {
-- 
GitLab