Skip to content
Snippets Groups Projects
Commit d10a5881 authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

wip

parent 692181d3
No related branches found
No related tags found
2 merge requests!111Release 0.12.1,!109F select acl
Pipeline #44384 failed
......@@ -26,12 +26,11 @@ package org.caosdb.server.database.backend.transaction;
import java.util.LinkedList;
import java.util.List;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
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;
......@@ -61,17 +60,24 @@ import org.caosdb.server.utils.EntityStatus;
public class RetrieveFullEntityTransaction extends BackendTransaction {
private final Container<? extends EntityInterface> container;
private final Principal principal;
private final Subject subject;
public RetrieveFullEntityTransaction(final EntityInterface entity) {
final Container<EntityInterface> c = new Container<>();
c.add(entity);
this.container = c;
this.subject = null;
}
public RetrieveFullEntityTransaction(final Container<? extends EntityInterface> container, final Principal principal) {
public RetrieveFullEntityTransaction(
final Container<? extends EntityInterface> container, final Subject subject) {
this.container = container;
this.principal = principal;
this.subject = subject;
}
public RetrieveFullEntityTransaction(final Container<? extends EntityInterface> container) {
this.container = container;
this.subject = null;
}
public RetrieveFullEntityTransaction(final EntityID id) {
......@@ -227,11 +233,13 @@ public class RetrieveFullEntityTransaction extends BackendTransaction {
final ReferenceValue value, final List<Selection> selections, final String propertyName) {
final RetrieveEntity ref = new RetrieveEntity(value.getId());
if (this.subject != null) {
// check whether the referenced entity may be retrieved
final EntityACL entityACL = ref.getEntityACL();
if (!entityACL.isPermitted(this.principal, EntityPermission.RETRIEVE_ENTITY)) {
if (!entityACL.isPermitted(this.subject, EntityPermission.RETRIEVE_ENTITY)) {
return;
}
}
// recursion! (Only for the matching selections)
retrieveFullEntity(ref, getSubSelects(selections, propertyName));
value.setEntity(ref, true);
......
......@@ -77,7 +77,6 @@ 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.
......
......@@ -114,7 +114,7 @@ public class Retrieve extends Transaction<RetrieveContainer> {
private void retrieveFullEntities(final RetrieveContainer container, final Access access)
throws Exception {
execute(new RetrieveFullEntityTransaction(container), access);
execute(new RetrieveFullEntityTransaction(container, getTransactor()), access);
}
@Override
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment