From 847674d62c312202383a559857ed5aa9aedaaed2 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Fri, 26 Dec 2025 22:18:03 +0100 Subject: [PATCH] feat: add club_tresorier to club admin --- .../ffsaf/rest/AffiliationEndpoints.java | 2 +- .../ffsaf/rest/AffiliationRequestEndpoints.java | 6 +++--- .../fr/titionfire/ffsaf/rest/ClubEndpoints.java | 14 +++++++------- .../fr/titionfire/ffsaf/rest/CompteEndpoints.java | 2 +- .../fr/titionfire/ffsaf/rest/LicenceEndpoints.java | 10 +++++----- .../titionfire/ffsaf/rest/MembreClubEndpoints.java | 2 +- .../fr/titionfire/ffsaf/rest/MembreEndpoints.java | 8 ++++---- src/main/webapp/src/components/Nav.jsx | 7 ++++--- 8 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/main/java/fr/titionfire/ffsaf/rest/AffiliationEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/AffiliationEndpoints.java index a65e9a7..f4c0c43 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/AffiliationEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/AffiliationEndpoints.java @@ -49,7 +49,7 @@ public class AffiliationEndpoints { @GET @Path("{id}") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Renvoie les affiliations pour un club", description = "Cette méthode renvoie les affiliations pour un club donné. Seuls les administrateurs de la fédération et les présidents, secrétaires et responsables intranet du club peuvent accéder à cette méthode.") @APIResponses(value = { diff --git a/src/main/java/fr/titionfire/ffsaf/rest/AffiliationRequestEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/AffiliationRequestEndpoints.java index fdaf2ea..8144bd9 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/AffiliationRequestEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/AffiliationRequestEndpoints.java @@ -73,7 +73,7 @@ public class AffiliationRequestEndpoints { @GET @Path("/{id}") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Renvoie une demande d'affiliation", description = "Cette méthode renvoie une demande d'affiliation " + "pour l'identifiant spécifié.") @@ -92,7 +92,7 @@ public class AffiliationRequestEndpoints { @DELETE @Path("/{id}") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Supprime une demande d'affiliation", description = "Cette méthode supprime une demande " + "d'affiliation pour l'identifiant spécifié.") @@ -128,7 +128,7 @@ public class AffiliationRequestEndpoints { @PUT @Path("/edit") - @RolesAllowed({"club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.TEXT_PLAIN) @Consumes(MediaType.MULTIPART_FORM_DATA) @Operation(summary = "Modifie une demande d'affiliation", description = "Cette méthode modifie une demande " + diff --git a/src/main/java/fr/titionfire/ffsaf/rest/ClubEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/ClubEndpoints.java index a329192..11ae0da 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/ClubEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/ClubEndpoints.java @@ -109,7 +109,7 @@ public class ClubEndpoints { @GET @Path("{id}") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Renvoie les détails d'un club en fonction de son identifiant", description = "Renvoie les " + "détails d'un club en fonction de son identifiant, y compris les informations sur les membres et les affiliations") @@ -230,7 +230,7 @@ public class ClubEndpoints { @GET @Path("/me") - @RolesAllowed({"club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Renvoie les informations du club de l'utilisateur connecté", description = "Renvoie les " + "informations du club de l'utilisateur connecté") @@ -247,7 +247,7 @@ public class ClubEndpoints { @PUT @Path("/me") - @RolesAllowed({"club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.MULTIPART_FORM_DATA) @Operation(summary = "Met à jour les informations du club de l'utilisateur connecté", description = "Met à jour les" + @@ -264,7 +264,7 @@ public class ClubEndpoints { @GET @Path("/me/affiliation") - @RolesAllowed({"club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Operation(summary = "Renvoie l'attestation d'affiliation du club de l'utilisateur connecté", description = "Renvoie l'attestation d'affiliation du club de l'utilisateur connecté") @APIResponses(value = { @@ -296,7 +296,7 @@ public class ClubEndpoints { @GET @Path("/renew/{id}") - @RolesAllowed({"club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Operation(hidden = true) public Uni getRenew(@PathParam("id") long id, @QueryParam("m1") long m1_id, @@ -307,7 +307,7 @@ public class ClubEndpoints { @GET @Path("/desk/{id}") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Renvoie la liste des membres du bureau du club", description = "Renvoie la liste des membres " + "du bureau du club spécifié") @@ -345,7 +345,7 @@ public class ClubEndpoints { @GET @Path("{id}/status") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Operation(summary = "Renvoie le statut du club", description = "Renvoie le statut du club spécifié") @APIResponses(value = { @APIResponse(responseCode = "200", description = "Le statut du club"), diff --git a/src/main/java/fr/titionfire/ffsaf/rest/CompteEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/CompteEndpoints.java index a537a85..1003294 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/CompteEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/CompteEndpoints.java @@ -37,7 +37,7 @@ public class CompteEndpoints { @GET @Path("{id}") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Operation(summary = "Renvoie les informations d'un compte utilisateur", description = "Renvoie les informations d'un" + " compte utilisateur en fonction de son identifiant long (UUID)") @APIResponses(value = { diff --git a/src/main/java/fr/titionfire/ffsaf/rest/LicenceEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/LicenceEndpoints.java index 4ba683e..efcd9d8 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/LicenceEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/LicenceEndpoints.java @@ -36,7 +36,7 @@ public class LicenceEndpoints { @GET @Path("{id}") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Renvoie les licences d'un membre", description = "Renvoie les licences d'un membre en fonction " + "de son identifiant") @@ -68,7 +68,7 @@ public class LicenceEndpoints { @GET @Path("current/club") - @RolesAllowed({"club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Renvoie les licences de la saison en cours (pour les clubs)", description = "Renvoie les " + "licences de la saison en cours (pour les clubs)") @@ -83,7 +83,7 @@ public class LicenceEndpoints { @POST @Path("pay") - @RolesAllowed({"club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Operation(summary = "Paiement des licence", description = "Retourne le lien de paiement pour les licence des membre fournie") @@ -161,7 +161,7 @@ public class LicenceEndpoints { @POST @Path("club/{id}") - @RolesAllowed({"club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.MULTIPART_FORM_DATA) @Operation(summary = "Demande une nouvelle licence", description = "Demande une nouvelle licence en fonction de" + @@ -178,7 +178,7 @@ public class LicenceEndpoints { @DELETE @Path("club/{id}") - @RolesAllowed({"club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.TEXT_PLAIN) @Operation(summary = "Supprime une demande de licence", description = "Supprime une demande de licence en fonction " + "de son identifiant (pour les clubs)") diff --git a/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java index eefa6f6..71160f5 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/MembreClubEndpoints.java @@ -24,7 +24,7 @@ import org.eclipse.microprofile.openapi.annotations.tags.Tag; import java.util.List; @Tag(name = "Membre club", description = "Gestion des membres (pour les clubs)") -@RolesAllowed({"club_president", "club_secretaire", "club_respo_intra"}) +@RolesAllowed({"club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Path("api/member") public class MembreClubEndpoints { diff --git a/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java index cc0794b..c60cb9b 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java @@ -51,7 +51,7 @@ public class MembreEndpoints { @GET @Path("{id}") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Renvoie les détails d'un membre en fonction de son identifiant", description = "Renvoie les " + "détails d'un membre en fonction de son identifiant") @@ -68,7 +68,7 @@ public class MembreEndpoints { @GET @Path("/find/licence") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Operation(summary = "Renvoie les détails d'un membre en fonction de son numéro de licence", description = "Renvoie " + "les détails d'un membre en fonction de son numéro de licence") @APIResponses(value = { @@ -130,7 +130,7 @@ public class MembreEndpoints { @GET @Path("{id}/photo") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Operation(summary = "Renvoie la photo d'un membre", description = "Renvoie la photo d'un membre en fonction de son identifiant") @APIResponses(value = { @APIResponse(responseCode = "200", description = "La photo du membre"), @@ -146,7 +146,7 @@ public class MembreEndpoints { @GET @Path("{id}/licence") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_tresorier", "club_respo_intra"}) @Operation(summary = "Renvoie le pdf de la licence d'un membre", description = "Renvoie le pdf de la licence d'un membre en fonction de son identifiant") @APIResponses(value = { @APIResponse(responseCode = "200", description = "Le pdf de la licence"), diff --git a/src/main/webapp/src/components/Nav.jsx b/src/main/webapp/src/components/Nav.jsx index e6fd02b..021255f 100644 --- a/src/main/webapp/src/components/Nav.jsx +++ b/src/main/webapp/src/components/Nav.jsx @@ -2,6 +2,7 @@ import './Nav.css' import {NavLink} from "react-router-dom"; import {useAuth} from "../hooks/useAuth.jsx"; import {login, logout} from "../utils/auth.js"; +import {isClubAdmin} from "../utils/Tools.js"; export function Nav() { @@ -55,7 +56,8 @@ function CompMenu() { } @@ -63,8 +65,7 @@ function CompMenu() { function ClubMenu() { const {is_authenticated, userinfo} = useAuth() - if (!is_authenticated || !(userinfo?.roles?.includes("club_president") - || userinfo?.roles?.includes("club_secretaire") || userinfo?.roles?.includes("club_respo_intra"))) + if (!is_authenticated || !(isClubAdmin(userinfo))) return <> return
  • -- 2.49.0