From 9e9391465d2bddc8a618ea8dc85aa06a0ff8c97a Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Sat, 16 Aug 2025 11:14:41 +0200 Subject: [PATCH] feat: update competition perm --- .../ffsaf/domain/service/CompetitionService.java | 10 +++------- .../ffsaf/domain/service/KeycloakService.java | 1 + .../java/fr/titionfire/ffsaf/rest/CompteEndpoints.java | 4 ++-- .../fr/titionfire/ffsaf/rest/from/MemberPermForm.java | 6 +++--- src/main/webapp/src/pages/admin/member/PremForm.jsx | 8 ++++---- .../webapp/src/pages/competition/CompetitionList.jsx | 7 +++++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/CompetitionService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/CompetitionService.java index 57af452..87130e7 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/CompetitionService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/CompetitionService.java @@ -2,6 +2,7 @@ package fr.titionfire.ffsaf.domain.service; import fr.titionfire.ffsaf.data.model.CompetitionModel; import fr.titionfire.ffsaf.data.model.MembreModel; +import fr.titionfire.ffsaf.data.model.RegisterModel; import fr.titionfire.ffsaf.data.repository.*; import fr.titionfire.ffsaf.net2.ServerCustom; import fr.titionfire.ffsaf.net2.data.SimpleCompet; @@ -13,9 +14,7 @@ import fr.titionfire.ffsaf.rest.data.SimpleCompetData; import fr.titionfire.ffsaf.rest.data.SimpleRegisterComb; import fr.titionfire.ffsaf.rest.exception.DBadRequestException; import fr.titionfire.ffsaf.rest.exception.DForbiddenException; -import fr.titionfire.ffsaf.rest.exception.DNotFoundException; import fr.titionfire.ffsaf.utils.CompetitionSystem; -import fr.titionfire.ffsaf.data.model.RegisterModel; import fr.titionfire.ffsaf.utils.SecurityCtx; import fr.titionfire.ffsaf.utils.Utils; import io.quarkus.cache.Cache; @@ -144,11 +143,8 @@ public class CompetitionService { if (data.getId() == null) { return combRepository.find("userId = ?1", securityCtx.getSubject()).firstResult() .invoke(Unchecked.consumer(combModel -> { - if (combModel == null) - throw new DNotFoundException("Profile non trouvé"); - if (data.getSystem() == CompetitionSystem.SAFCA) - if (!securityCtx.getRoles().contains("safca_create_compet")) - throw new DForbiddenException("Vous ne pouvez pas créer de compétition SAFCA"); + if (!securityCtx.getRoles().contains("create_compet") && !securityCtx.getRoles().contains("federation_admin")) + throw new DForbiddenException("Vous ne pouvez pas créer de compétition"); })) .map(MembreModel::getClub) .chain(clubModel -> { diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java index 6e22109..5748b33 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java @@ -253,6 +253,7 @@ public class KeycloakService { return null; }) : Uni.createFrom().nullItem()) .invoke(user -> membreModel.setUserId(user.getId())) + .call(user -> updateRole(user.getId(), List.of("safca_user"), List.of())) .call(user -> enabled_email ? reactiveMailer.send( Mail.withText(user.getEmail(), "FFSAF - Creation de votre compte sur l'intranet", diff --git a/src/main/java/fr/titionfire/ffsaf/rest/CompteEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/CompteEndpoints.java index 4d08b15..a537a85 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/CompteEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/CompteEndpoints.java @@ -115,8 +115,8 @@ public class CompteEndpoints { else toRemove.add("safca_super_admin"); if (form.isSafca_user()) toAdd.add("safca_user"); else toRemove.add("safca_user"); - if (form.isSafca_create_compet()) toAdd.add("safca_create_compet"); - else toRemove.add("safca_create_compet"); + if (form.isCreate_compet()) toAdd.add("create_compet"); + else toRemove.add("create_compet"); return service.updateRole(id, toAdd, toRemove); } diff --git a/src/main/java/fr/titionfire/ffsaf/rest/from/MemberPermForm.java b/src/main/java/fr/titionfire/ffsaf/rest/from/MemberPermForm.java index 5b24b51..e2bfd28 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/from/MemberPermForm.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/from/MemberPermForm.java @@ -16,9 +16,9 @@ public class MemberPermForm { @FormParam("safca_user") private boolean safca_user; - @Schema(description = "Indique si le membre peut créer des compétitions sur SAFCA.", example = "false", required = true) - @FormParam("safca_create_compet") - private boolean safca_create_compet; + @Schema(description = "Indique si le membre peut créer des compétitions.", example = "false", required = true) + @FormParam("create_compet") + private boolean create_compet; @Schema(description = "Indique si le membre est un super administrateur SAFCA.", example = "false", required = true) @FormParam("safca_super_admin") diff --git a/src/main/webapp/src/pages/admin/member/PremForm.jsx b/src/main/webapp/src/pages/admin/member/PremForm.jsx index 59525e9..cfb2295 100644 --- a/src/main/webapp/src/pages/admin/member/PremForm.jsx +++ b/src/main/webapp/src/pages/admin/member/PremForm.jsx @@ -14,7 +14,7 @@ export function PremForm({userData}) { const formData = new FormData(); formData.append("federation_admin", event.target.federation_admin?.checked); formData.append("safca_user", event.target.safca_user?.checked); - formData.append("safca_create_compet", event.target.safca_create_compet?.checked); + formData.append("create_compet", event.target.create_compet?.checked); formData.append("safca_super_admin", event.target.safca_super_admin?.checked); apiAxios.put(`/compte/${userData.userId}/roles`, formData, { @@ -68,6 +68,8 @@ function PremFormContent({userData}) { ? <> + : error && } @@ -76,12 +78,10 @@ function PremFormContent({userData}) { {data ? <> - : error && } -} \ No newline at end of file +} diff --git a/src/main/webapp/src/pages/competition/CompetitionList.jsx b/src/main/webapp/src/pages/competition/CompetitionList.jsx index 0f885f9..7f16ba1 100644 --- a/src/main/webapp/src/pages/competition/CompetitionList.jsx +++ b/src/main/webapp/src/pages/competition/CompetitionList.jsx @@ -3,6 +3,7 @@ import {useLoadingSwitcher} from "../../hooks/useLoading.jsx"; import {useFetch} from "../../hooks/useFetch.js"; import {AxiosError} from "../../components/AxiosError.jsx"; import {ThreeDots} from "react-loader-spinner"; +import {useAuth} from "../../hooks/useAuth.jsx"; export function CompetitionList() { @@ -26,11 +27,13 @@ export function CompetitionList() { } function MakeCentralPanel({data, navigate}) { + const {userinfo} = useAuth() return <> + {userinfo?.roles?.includes("create_compet") &&
-
+ }
{data.map(req => ())} @@ -58,4 +61,4 @@ function Def() {
  • -} \ No newline at end of file +}