Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 09ca9674 authored by Joze RIHTARSIC's avatar Joze RIHTARSIC
Browse files

Fix "public" search filter issue

parent 12226d85
No related branches found
No related tags found
No related merge requests found
...@@ -19,10 +19,10 @@ ENV SMP_HOME=/opt/smp \ ...@@ -19,10 +19,10 @@ ENV SMP_HOME=/opt/smp \
SMP_DB_USER_PASSWORD=smp \ SMP_DB_USER_PASSWORD=smp \
MYSQL_ROOT_PASSWORD=root \ MYSQL_ROOT_PASSWORD=root \
# sml environment variables # sml environment variables
SML_VERSION=4.2.RC1 \ SML_VERSION=4.2 \
SML_DISTRIBUTION_URL=https://ec.europa.eu/digital-building-blocks/artifact/repository/public/eu/europa/ec/bdmsl/bdmsl-webapp/ \ SML_DISTRIBUTION_URL=https://ec.europa.eu/digital-building-blocks/artifact/repository/public/eu/europa/ec/bdmsl/bdmsl-webapp/ \
SML_SHA512=2330e6caf557fd6a6e8725eb339c26cb2d06f0ca768fd1766989f5dec7557e41375ef61b65cad5d87fa478f3c468272880ebe8521bb66e8e7dee9bb16d0a3d51 \ SML_SHA512=b505958c87ce046c0b25f78fbb8555a22a3a636b3906fec77fd24341f649e9e01037083b2617827269ff3554ddbe5168cb4278f1e2d81172e444f6150e92f73e \
SML_SETUP_SHA512=f9b7a9607f34f2d547acac13e7044df04fdf616b163f4cae8788f7b1eccd837c3db947458b4f55273d263f6af2e794c18d5216484cc8132e3cfd2dc176d9e1bf \ SML_SETUP_SHA512=e99ee7b8e193566964321ca126f2b20dfcc2ed904e5c2d0dc8253e49b727067e48420813bec3ed617d64724a66525c2aa17e502a130a2156d6cb81406c5d2bf9 \
SML_DB_SCHEMA=sml \ SML_DB_SCHEMA=sml \
SML_DB_USER=sml \ SML_DB_USER=sml \
SML_DB_USER_PASSWORD=sml \ SML_DB_USER_PASSWORD=sml \
......
...@@ -109,7 +109,7 @@ public class ResourceDao extends BaseDao<DBResource> { ...@@ -109,7 +109,7 @@ public class ResourceDao extends BaseDao<DBResource> {
} }
public List<DBResource> getPublicResourcesSearch(int iPage, int iPageSize, DBUser user, String schema, String identifier) { public List<DBResource> getPublicResourcesSearch(int iPage, int iPageSize, DBUser user, String schema, String identifier) {
LOG.debug("Get resources for user [{}]", user); LOG.debug("Get resources list for user [{}], search scheme [{}] and search value [{}]", user, schema, identifier);
TypedQuery<DBResource> query = memEManager.createNamedQuery(QUERY_RESOURCE_ALL_FOR_USER, DBResource.class); TypedQuery<DBResource> query = memEManager.createNamedQuery(QUERY_RESOURCE_ALL_FOR_USER, DBResource.class);
if (iPageSize > -1 && iPage > -1) { if (iPageSize > -1 && iPage > -1) {
...@@ -126,7 +126,7 @@ public class ResourceDao extends BaseDao<DBResource> { ...@@ -126,7 +126,7 @@ public class ResourceDao extends BaseDao<DBResource> {
} }
public Long getPublicResourcesSearchCount(DBUser user, String schema, String identifier) { public Long getPublicResourcesSearchCount(DBUser user, String schema, String identifier) {
LOG.debug("Get resources count for user [{}]", user); LOG.debug("Get resources count for user [{}], search scheme [{}] and search value [{}]", user, schema, identifier);
TypedQuery<Long> query = memEManager.createNamedQuery(QUERY_RESOURCE_ALL_FOR_USER_COUNT, Long.class); TypedQuery<Long> query = memEManager.createNamedQuery(QUERY_RESOURCE_ALL_FOR_USER_COUNT, Long.class);
query.setParameter(PARAM_USER_ID, user != null ? user.getId() : null); query.setParameter(PARAM_USER_ID, user != null ? user.getId() : null);
......
...@@ -96,7 +96,7 @@ import static eu.europa.ec.edelivery.smp.data.dao.QueryNames.*; ...@@ -96,7 +96,7 @@ import static eu.europa.ec.edelivery.smp.data.dao.QueryNames.*;
@NamedQuery(name = QUERY_RESOURCE_ALL_FOR_USER, query = "SELECT DISTINCT r FROM DBResource r LEFT JOIN DBResourceMember rm ON r.id = rm.resource.id WHERE " + @NamedQuery(name = QUERY_RESOURCE_ALL_FOR_USER, query = "SELECT DISTINCT r FROM DBResource r LEFT JOIN DBResourceMember rm ON r.id = rm.resource.id WHERE " +
" (:resource_identifier IS NULL OR r.identifierValue like :resource_identifier) " + " (:resource_identifier IS NULL OR r.identifierValue like :resource_identifier) " +
" AND (:resource_scheme IS NULL OR r.identifierScheme like :resource_scheme) " + " AND (:resource_scheme IS NULL OR r.identifierScheme like :resource_scheme) " +
" AND :user_id IS NOT NULL AND rm.user.id = :user_id " + " AND ( :user_id IS NOT NULL AND rm.user.id = :user_id " +
" OR r.visibility ='PUBLIC' " + // user must be member of the group or the group is public " OR r.visibility ='PUBLIC' " + // user must be member of the group or the group is public
" AND (:user_id IS NOT NULL " + " AND (:user_id IS NOT NULL " +
" AND ((select count(gm.id) FROM DBGroupMember gm where gm.user.id = :user_id and gm.group.id = r.group.id) > 0 " + " AND ((select count(gm.id) FROM DBGroupMember gm where gm.user.id = :user_id and gm.group.id = r.group.id) > 0 " +
...@@ -106,13 +106,13 @@ import static eu.europa.ec.edelivery.smp.data.dao.QueryNames.*; ...@@ -106,13 +106,13 @@ import static eu.europa.ec.edelivery.smp.data.dao.QueryNames.*;
" OR (select count(dm.id) from DBDomainMember dm where dm.user.id = :user_id and dm.domain.id = r.group.domain.id) > 0 " + " OR (select count(dm.id) from DBDomainMember dm where dm.user.id = :user_id and dm.domain.id = r.group.domain.id) > 0 " +
" OR (select count(gm.id) from DBGroupMember gm where gm.user.id = :user_id and gm.group.domain.id = r.group.domain.id) > 0 " + " OR (select count(gm.id) from DBGroupMember gm where gm.user.id = :user_id and gm.group.domain.id = r.group.domain.id) > 0 " +
" OR (select count(rm.id) from DBResourceMember rm where rm.user.id = :user_id and rm.resource.group.domain.id = r.group.domain.id) > 0 " + " OR (select count(rm.id) from DBResourceMember rm where rm.user.id = :user_id and rm.resource.group.domain.id = r.group.domain.id) > 0 " +
"))"+ ")))"+
"order by r.identifierScheme, r.identifierValue" "order by r.identifierScheme, r.identifierValue"
) )
@NamedQuery(name = QUERY_RESOURCE_ALL_FOR_USER_COUNT, query = "SELECT count(distinct r.id) FROM DBResource r LEFT JOIN DBResourceMember rm ON r.id = rm.resource.id WHERE " + @NamedQuery(name = QUERY_RESOURCE_ALL_FOR_USER_COUNT, query = "SELECT count(distinct r.id) FROM DBResource r LEFT JOIN DBResourceMember rm ON r.id = rm.resource.id WHERE " +
" (:resource_identifier IS NULL OR r.identifierValue like :resource_identifier) " + " (:resource_identifier IS NULL OR r.identifierValue like :resource_identifier) " +
" AND (:resource_scheme IS NULL OR r.identifierScheme like :resource_scheme) " + " AND (:resource_scheme IS NULL OR r.identifierScheme like :resource_scheme) " +
" AND :user_id IS NOT NULL AND rm.user.id = :user_id " + " AND (:user_id IS NOT NULL AND rm.user.id = :user_id " +
" OR r.visibility ='PUBLIC' " + // user must be member of the group or the group is public " OR r.visibility ='PUBLIC' " + // user must be member of the group or the group is public
" AND (:user_id IS NOT NULL " + " AND (:user_id IS NOT NULL " +
" AND ((select count(gm.id) FROM DBGroupMember gm where gm.user.id = :user_id and gm.group.id = r.group.id) > 0 " + " AND ((select count(gm.id) FROM DBGroupMember gm where gm.user.id = :user_id and gm.group.id = r.group.id) > 0 " +
...@@ -122,7 +122,7 @@ import static eu.europa.ec.edelivery.smp.data.dao.QueryNames.*; ...@@ -122,7 +122,7 @@ import static eu.europa.ec.edelivery.smp.data.dao.QueryNames.*;
" OR (select count(dm.id) from DBDomainMember dm where dm.user.id = :user_id and dm.domain.id = r.group.domain.id) > 0 " + " OR (select count(dm.id) from DBDomainMember dm where dm.user.id = :user_id and dm.domain.id = r.group.domain.id) > 0 " +
" OR (select count(gm.id) from DBGroupMember gm where gm.user.id = :user_id and gm.group.domain.id = r.group.domain.id) > 0 " + " OR (select count(gm.id) from DBGroupMember gm where gm.user.id = :user_id and gm.group.domain.id = r.group.domain.id) > 0 " +
" OR (select count(rm.id) from DBResourceMember rm where rm.user.id = :user_id and rm.resource.group.domain.id = r.group.domain.id) > 0 " + " OR (select count(rm.id) from DBResourceMember rm where rm.user.id = :user_id and rm.resource.group.domain.id = r.group.domain.id) > 0 " +
"))" ")))"
) )
public class DBResource extends BaseEntity { public class DBResource extends BaseEntity {
......
...@@ -3,6 +3,8 @@ package eu.europa.ec.edelivery.smp.data.dao; ...@@ -3,6 +3,8 @@ package eu.europa.ec.edelivery.smp.data.dao;
import eu.europa.ec.edelivery.smp.data.model.doc.DBResource; import eu.europa.ec.edelivery.smp.data.model.doc.DBResource;
import eu.europa.ec.edelivery.smp.data.model.doc.DBResourceFilter; import eu.europa.ec.edelivery.smp.data.model.doc.DBResourceFilter;
import org.hamcrest.CoreMatchers;
import org.hamcrest.MatcherAssert;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
...@@ -46,12 +48,24 @@ public class ResourceDaoSearchTest extends AbstractBaseDao { ...@@ -46,12 +48,24 @@ public class ResourceDaoSearchTest extends AbstractBaseDao {
assertResources(result, "1-1-1::pubPubPub"); assertResources(result, "1-1-1::pubPubPub");
// user1 (admin) and user2 (viewer) are members of all resources // user1 (admin) and user2 (viewer) are members of all resources
result = testInstance.getPublicResourcesSearch(-1,-1,testUtilsDao.getUser1(), null, null); result = testInstance.getPublicResourcesSearch(-1,-1,testUtilsDao.getUser2(), null, null);
Assert.assertEquals(8, result.size()); Assert.assertEquals(8, result.size());
result = testInstance.getPublicResourcesSearch(-1,-1,testUtilsDao.getUser1(), null, "pubPub");
Assert.assertEquals(2, result.size());
result.forEach(resource -> MatcherAssert.assertThat(resource.getIdentifierValue(), CoreMatchers.containsString("pubPub")));
result = testInstance.getPublicResourcesSearch(-1,-1,testUtilsDao.getUser1(), "1-1",null);
Assert.assertEquals(1, result.size());
result.forEach(resource -> MatcherAssert.assertThat(resource.getIdentifierScheme(), CoreMatchers.containsString("1-1")));
result = testInstance.getPublicResourcesSearch(-1,-1,testUtilsDao.getUser1(), "1-1","priv");
Assert.assertEquals(0, result.size());
result = testInstance.getPublicResourcesSearch(-1,-1,testUtilsDao.getUser2(), null, null); result = testInstance.getPublicResourcesSearch(-1,-1,testUtilsDao.getUser2(), null, null);
Assert.assertEquals(8, result.size()); Assert.assertEquals(8, result.size());
// user3 is direct member of private domain - can see only public resource on public groups // user3 is direct member of private domain - can see only public resource on public groups
result = testInstance.getPublicResourcesSearch(-1,-1,testUtilsDao.getUser3(), null, null); result = testInstance.getPublicResourcesSearch(-1,-1,testUtilsDao.getUser3(), null, null);
assertResources(result, "1-1-1::pubPubPub", "5-5-5::privPubPub"); assertResources(result, "1-1-1::pubPubPub", "5-5-5::privPubPub");
...@@ -84,6 +98,15 @@ public class ResourceDaoSearchTest extends AbstractBaseDao { ...@@ -84,6 +98,15 @@ public class ResourceDaoSearchTest extends AbstractBaseDao {
result = testInstance.getPublicResourcesSearchCount(testUtilsDao.getUser1(), null, null); result = testInstance.getPublicResourcesSearchCount(testUtilsDao.getUser1(), null, null);
Assert.assertEquals(8, result.intValue()); Assert.assertEquals(8, result.intValue());
result = testInstance.getPublicResourcesSearchCount(testUtilsDao.getUser1(), null, "pubPub");
Assert.assertEquals(2, result.intValue());
result = testInstance.getPublicResourcesSearchCount(testUtilsDao.getUser1(), "1-1",null);
Assert.assertEquals(1, result.intValue());
result = testInstance.getPublicResourcesSearchCount(testUtilsDao.getUser1(), "1-1","priv");
Assert.assertEquals(0, result.intValue());
result = testInstance.getPublicResourcesSearchCount(testUtilsDao.getUser2(), null, null); result = testInstance.getPublicResourcesSearchCount(testUtilsDao.getUser2(), null, null);
Assert.assertEquals(8, result.intValue()); Assert.assertEquals(8, result.intValue());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment