Commit 9151f9dd authored by Noel Alonso's avatar Noel Alonso
Browse files

Añade términos de consultas fijadas por servicio

De esta manera se garantiza que los usuarios no puedan consultar
settings de otros usuarios o servicios

Adapta tests
parent 1318835b
Loading
Loading
Loading
Loading
+55 −0
Original line number Diff line number Diff line
package es.redmic.usersettingslib.repository;

import java.util.Map;

import javax.annotation.PostConstruct;

import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Value;

/*-
 * #%L
 * user-settings-lib
@@ -28,6 +37,14 @@ import es.redmic.usersettingslib.model.Settings;
public abstract class SettingsRepositoryImpl<TModel extends Settings, TQueryDTO extends SimpleQueryDTO>
		extends RWDataESRepository<TModel, TQueryDTO> {

	@Value("${microservice.commands.path}")
	String microServiceCommandsPath;

	@Value("${controller.mapping.SETTINGS}")
	String controllerPath;

	private static QueryBuilder INTERNAL_QUERY = null;

	private static String[] INDEX = { "settings" };
	private static String TYPE = "_doc";

@@ -35,6 +52,44 @@ public abstract class SettingsRepositoryImpl<TModel extends Settings, TQueryDTO
		super(INDEX, TYPE);
	}

	@PostConstruct
	public void postConstructSettingsRepositoryImpl() {
		INTERNAL_QUERY = QueryBuilders.boolQuery()
				.must(QueryBuilders.termQuery("service", microServiceCommandsPath + controllerPath))
				.must(QueryBuilders.existsQuery("name"));
	}

	@Override
	public QueryBuilder getInternalQuery() {
		return INTERNAL_QUERY;
	}

	/**
	 * Sobrescribe a la función base. Función que dado un conjunto de términos, nos
	 * devuelve una query de elasticsearch. Debe estar implementado en cada
	 * repositorio para darle una funcionalidad específica y en la base estarán las
	 * funcionalidades que comparten todos los repositorios.
	 * 
	 * @param terms
	 *            Map de términos pasados por la query.
	 * @param query
	 *            QueryBuilder con la query de los términos acumulados en los
	 *            repositorios específicos.
	 * @return query de tipo terms de elasticsearch.
	 */
	@Override
	public QueryBuilder getTermQuery(Map<String, Object> terms, BoolQueryBuilder query) {

		if (terms.containsKey("id")) {
			query.must(QueryBuilders.termQuery("id", terms.get("id")));
		}

		if (terms.containsKey("userId")) {
			query.must(QueryBuilders.termQuery("userId", terms.get("userId")));
		}
		return super.getTermQuery(terms, query);
	}

	@Override
	protected EventApplicationResult checkInsertConstraintsFulfilled(Settings modelToIndex) {
		return new EventApplicationResult(true);
+5 −4
Original line number Diff line number Diff line
@@ -71,7 +71,8 @@ public abstract class SettingsDataUtil {
	// @formatter:off
	public final static String PREFIX = "settings-",
			CODE = UUID.randomUUID().toString(),
			USER = "13";
			USER = "13",
			SERVICE_NAME = "/atlas/commands/layer/settings";
	// @formatter:on

	// SELECT
@@ -526,7 +527,7 @@ public abstract class SettingsDataUtil {
		SelectionDTO selection = new SelectionDTO();

		selection.setId(PREFIX + code);
		selection.setService("prueba");
		selection.setService(SERVICE_NAME);
		selection.setUserId(USER);
		selection.setSelection(new ArrayList<String>() {
			{
@@ -554,7 +555,7 @@ public abstract class SettingsDataUtil {
		persistence.setName("prueba");
		persistence.setUserId(USER);

		persistence.setService("prueba");
		persistence.setService(SERVICE_NAME);

		persistence.setInserted(DateTime.now());
		persistence.setUpdated(DateTime.now());
@@ -576,7 +577,7 @@ public abstract class SettingsDataUtil {
		settings.setName("prueba");
		settings.setUserId(USER);

		settings.setService("prueba");
		settings.setService(SERVICE_NAME);
		settings.setSelection(new ArrayList<String>() {
			{
				add("1");