diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java index 4d1fde4e6..1a68dcead 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java @@ -3,8 +3,8 @@ package eu.eudat.data.dao.entities; import eu.eudat.data.dao.DatabaseAccess; import eu.eudat.data.dao.criteria.DatasetCriteria; import eu.eudat.data.dao.databaselayer.service.DatabaseService; -import eu.eudat.data.entities.DMP; import eu.eudat.data.entities.Dataset; +import eu.eudat.data.entities.UserDMP; import eu.eudat.data.entities.UserInfo; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; @@ -43,8 +43,11 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("dmp").get("version"), query.subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.equal(externalRoot.get("dmp").get("groupId"), nestedRoot.get("dmp").get("groupId")), Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmp:version")), String.class))); if (criteria.getDmpIds() != null && !criteria.getDmpIds().isEmpty()) query.where((builder, root) -> root.get("dmp").get("id").in(criteria.getDmpIds())); - if (criteria.getRole() != null) + if (criteria.getRole() != null) { query.where((builder, root) -> builder.equal(root.join("dmp").join("users").get("role"), criteria.getRole())); + } else { + query.where((builder, root) -> root.join("dmp").join("users").get("role").in(UserDMP.UserDMPRoles.getAllValues())); + } if (criteria.getOrganisations() != null && !criteria.getOrganisations().isEmpty()) query.where((builder, root) -> root.join("dmp").join("organisations").get("reference").in(criteria.getOrganisations())); if (criteria.getGrants() != null && !criteria.getGrants().isEmpty()) @@ -87,7 +90,7 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa public QueryableList getAuthenticated(QueryableList query, UserInfo principal) { if (principal.getId() == null) query.where((builder, root) -> builder.equal(root.get("isPublic"), true)); else { - query.where((builder, root) -> builder.or(builder.equal(root.get("dmp").get("creator"), principal), builder.equal(root.join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), principal.getId()))); + query.where((builder, root) -> builder.equal(root.join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), principal.getId())); } return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/UserDMP.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/UserDMP.java index 6e000136d..217b81821 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/UserDMP.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/UserDMP.java @@ -5,6 +5,7 @@ import eu.eudat.queryable.queryableentity.DataEntity; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; +import java.util.LinkedList; import java.util.List; import java.util.UUID; @@ -25,6 +26,14 @@ public class UserDMP implements DataEntity { return value; } + public static List getAllValues() { + List list = new LinkedList<>(); + for (Enum en : UserDMP.UserDMPRoles.values()) { + list.add(((UserDMPRoles) en).value); + } + return list; + } + public static UserDMPRoles fromInteger(Integer value) { switch (value) { case 0: