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 92f5aa841aed5f759d433076700a8b1ce13e26dc..f5b897ad93738e32633faf7b7ddf06378ece58e0 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 @@ -26,6 +26,7 @@ package org.caosdb.server.database.backend.transaction; import java.util.LinkedList; import java.util.List; +import org.apache.shiro.SecurityUtils; import org.caosdb.server.database.BackendTransaction; import org.caosdb.server.database.exceptions.EntityDoesNotExistException; import org.caosdb.server.datatype.CollectionValue; @@ -38,6 +39,8 @@ import org.caosdb.server.entity.RetrieveEntity; import org.caosdb.server.entity.Role; import org.caosdb.server.entity.container.Container; import org.caosdb.server.entity.wrapper.Property; +import org.caosdb.server.permissions.EntityACL; +import org.caosdb.server.permissions.EntityPermission; import org.caosdb.server.query.Query; import org.caosdb.server.query.Query.Selection; import org.caosdb.server.utils.EntityStatus; @@ -220,6 +223,12 @@ public class RetrieveFullEntityTransaction extends BackendTransaction { private void resolveReferenceValue( final ReferenceValue value, final List<Selection> selections, final String propertyName) { final RetrieveEntity ref = new RetrieveEntity(value.getId()); + + // check whether the referenced entity may be retrieved + final EntityACL entityACL = ref.getEntityACL(); + if (!entityACL.isPermitted(SecurityUtils.getSubject(), EntityPermission.RETRIEVE_ENTITY)) { + return; + } // recursion! (Only for the matching selections) retrieveFullEntity(ref, getSubSelects(selections, propertyName)); value.setEntity(ref, true);