From 692181d358f042773c47395495c95502b982f0c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com> Date: Sat, 2 Dec 2023 12:15:46 +0100 Subject: [PATCH] wip --- .../backend/transaction/RetrieveFullEntityTransaction.java | 7 +++++-- src/main/java/org/caosdb/server/entity/RetrieveEntity.java | 2 ++ src/main/java/org/caosdb/server/query/Query.java | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntityTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntityTransaction.java index f5b897ad..a45a86a1 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntityTransaction.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveFullEntityTransaction.java @@ -31,6 +31,7 @@ import org.caosdb.server.database.BackendTransaction; import org.caosdb.server.database.exceptions.EntityDoesNotExistException; import org.caosdb.server.datatype.CollectionValue; import org.caosdb.server.datatype.IndexedSingleValue; +import org.caosdb.server.accessControl.Principal; import org.caosdb.server.datatype.ReferenceValue; import org.caosdb.server.entity.EntityID; import org.caosdb.server.entity.EntityInterface; @@ -60,6 +61,7 @@ import org.caosdb.server.utils.EntityStatus; public class RetrieveFullEntityTransaction extends BackendTransaction { private final Container<? extends EntityInterface> container; + private final Principal principal; public RetrieveFullEntityTransaction(final EntityInterface entity) { final Container<EntityInterface> c = new Container<>(); @@ -67,8 +69,9 @@ public class RetrieveFullEntityTransaction extends BackendTransaction { this.container = c; } - public RetrieveFullEntityTransaction(final Container<? extends EntityInterface> container) { + public RetrieveFullEntityTransaction(final Container<? extends EntityInterface> container, final Principal principal) { this.container = container; + this.principal = principal; } public RetrieveFullEntityTransaction(final EntityID id) { @@ -226,7 +229,7 @@ public class RetrieveFullEntityTransaction extends BackendTransaction { // check whether the referenced entity may be retrieved final EntityACL entityACL = ref.getEntityACL(); - if (!entityACL.isPermitted(SecurityUtils.getSubject(), EntityPermission.RETRIEVE_ENTITY)) { + if (!entityACL.isPermitted(this.principal, EntityPermission.RETRIEVE_ENTITY)) { return; } // recursion! (Only for the matching selections) diff --git a/src/main/java/org/caosdb/server/entity/RetrieveEntity.java b/src/main/java/org/caosdb/server/entity/RetrieveEntity.java index 00a120fb..887e7d12 100644 --- a/src/main/java/org/caosdb/server/entity/RetrieveEntity.java +++ b/src/main/java/org/caosdb/server/entity/RetrieveEntity.java @@ -24,6 +24,8 @@ */ package org.caosdb.server.entity; +//TODO document the use of this class; it seems to exist of only constructors + public class RetrieveEntity extends Entity { public RetrieveEntity() { diff --git a/src/main/java/org/caosdb/server/query/Query.java b/src/main/java/org/caosdb/server/query/Query.java index 117176ec..29361d3a 100644 --- a/src/main/java/org/caosdb/server/query/Query.java +++ b/src/main/java/org/caosdb/server/query/Query.java @@ -77,6 +77,10 @@ import org.caosdb.server.transaction.WriteTransaction; import org.jdom2.Element; import org.slf4j.Logger; + +// TODO Document: The query is initialized with a RetrieveTransaction and its +// Container. The container is filled by the Query with the resulting IDs. The +// Retrieve transaction then handles the retrieve of all respective Entities. public class Query implements QueryInterface, ToElementable, EntityTransactionInterface { /** Class which represents the selection of (sub)properties. */ -- GitLab