From 93cc8e5ee7c80dc128df83c5bdbc473b631ea9ac Mon Sep 17 00:00:00 2001 From: Emilie Genton Date: Wed, 29 Mar 2023 16:23:52 +0200 Subject: [PATCH] =?UTF-8?q?Prend=20en=20compte=20si=20l'utilisateur=20n'es?= =?UTF-8?q?t=20pas=20connect=C3=A9=20pour=20chercher=20les=20communes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: #172826 Change-Id: Ie318b63bb7b59b48ad0ff021d1c79d7ff21f0c78 --- .../remocra/repository/CommuneRepository.java | 17 ++++++++-------- .../sdis83/remocra/web/CommuneController.java | 20 +++++++++++++------ 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/remocra/src/main/java/fr/sdis83/remocra/repository/CommuneRepository.java b/remocra/src/main/java/fr/sdis83/remocra/repository/CommuneRepository.java index 369861c5b..052a9c3cb 100644 --- a/remocra/src/main/java/fr/sdis83/remocra/repository/CommuneRepository.java +++ b/remocra/src/main/java/fr/sdis83/remocra/repository/CommuneRepository.java @@ -12,6 +12,7 @@ import java.util.List; import org.jooq.DSLContext; import org.jooq.SortField; +import org.jooq.impl.DSL; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -55,13 +56,8 @@ public List getListCommune( order.add(COMMUNE.NOM.desc()); } return context - .selectDistinct( - COMMUNE.ID, - COMMUNE.NOM, - COMMUNE.CODE, - COMMUNE.INSEE, - COMMUNE.GEOMETRIE, - COMMUNE.NOM.length()) + .select(COMMUNE.fields()) + .distinctOn(COMMUNE.NOM.length(), COMMUNE.NOM) .from(COMMUNE) .join(ZONE_COMPETENCE_COMMUNE) .on(COMMUNE.ID.eq(ZONE_COMPETENCE_COMMUNE.COMMUNE_ID)) @@ -69,9 +65,12 @@ public List getListCommune( .on(ZONE_COMPETENCE_COMMUNE.ZONE_COMPETENCE_ID.eq(ZONE_COMPETENCE.ID)) .join(ORGANISME) .on(ORGANISME.ZONE_COMPETENCE.eq(ZONE_COMPETENCE.ID)) - .leftOuterJoin(UTILISATEUR) + .join(UTILISATEUR) .on(UTILISATEUR.ORGANISME.eq(ORGANISME.ID)) - .where(UTILISATEUR.ORGANISME.in(organismes)) + // Si on a pas d'organisme, c'est-à-dire pas d'utilisateur connecté et que la page est + // ouverte au public + // on ne fitre pas en fonction des organismes + .where(organismes != null ? UTILISATEUR.ORGANISME.in(organismes) : DSL.trueCondition()) .and(COMMUNE.NOM.upper().like("%" + query.toUpperCase() + "%")) .and(COMMUNE.INSEE.like(insee)) .orderBy(order) diff --git a/remocra/src/main/java/fr/sdis83/remocra/web/CommuneController.java b/remocra/src/main/java/fr/sdis83/remocra/web/CommuneController.java index 769fc7a5d..6fd769ea5 100644 --- a/remocra/src/main/java/fr/sdis83/remocra/web/CommuneController.java +++ b/remocra/src/main/java/fr/sdis83/remocra/web/CommuneController.java @@ -15,6 +15,9 @@ import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -65,12 +68,17 @@ protected JSONSerializer additionnalIncludeExclude(JSONSerializer serializer) { protected List getRecords() { // On récupère les organismes accessibles à l'utilisateur (son organisme et les enfants de // cet organisme) - fr.sdis83.remocra.db.model.remocra.tables.pojos.Organisme organismeUtilisateur = - organismeRepository.getOrganismeWithIdUser( - utilisateurService.getCurrentUtilisateur().getId()); - - List organismes = - Organisme.getOrganismeAndChildren(organismeUtilisateur.getId().intValue()); + SecurityContext sc = SecurityContextHolder.getContext(); + Authentication aut = sc.getAuthentication(); + List organismes = null; + + // Si on n'a pas d'utilisateur connecté, on ne va pas chercher les organismes + if (aut != null && aut.isAuthenticated() && !"anonymousUser".equals(aut.getPrincipal())) { + fr.sdis83.remocra.db.model.remocra.tables.pojos.Organisme organismeUtilisateur = + organismeRepository.getOrganismeWithIdUser( + utilisateurService.getCurrentUtilisateur().getId()); + organismes = Organisme.getOrganismeAndChildren(organismeUtilisateur.getId().intValue()); + } // On va regarder pour filtrer sur uniquement les communes du département puisqu'il est // possible pour des raisons métier d'avoir les communes limitrophes d'autres départements