fix(security): audit RBAC complet v3.0 — rôles normalisés, lifecycle, changement mdp mobile
RBAC:
- HealthResource: @PermitAll
- RoleResource: @RolesAllowed ADMIN/SUPER_ADMIN/ADMIN_ORGANISATION class-level
- PropositionAideResource: @RolesAllowed MEMBRE/USER class-level
- AuthCallbackResource: @PermitAll
- EvenementResource: @PermitAll /publics et /test, count restreint
- BackupResource/LogsMonitoringResource/SystemResource: MODERATOR → MODERATEUR
- AnalyticsResource: MANAGER/MEMBER → ADMIN_ORGANISATION/MEMBRE
- RoleConstant.java: constantes de rôles centralisées
Cycle de vie membres:
- MemberLifecycleService: ajouterMembre()/retirerMembre() sur activation/radiation/archivage
- MembreResource: endpoint GET /numero/{numeroMembre}
- MembreService: méthode trouverParNumeroMembre()
Changement mot de passe:
- CompteAdherentResource: endpoint POST /auth/change-password (mobile)
- MembreKeycloakSyncService: changerMotDePasseDirectKeycloak() via API Admin Keycloak directe
- Fallback automatique si lions-user-manager indisponible
Workflow:
- Flyway V17-V23: rôles, types org, formules Option C, lifecycle columns, bareme cotisation
- Nouvelles classes: MemberLifecycleService, OrganisationModuleService, scheduler
- Security: OrganisationContextFilter, OrganisationContextHolder, ModuleAccessFilter
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
package dev.lions.unionflow.server.entity;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import jakarta.validation.constraints.*;
|
||||
import java.math.BigDecimal;
|
||||
import lombok.*;
|
||||
|
||||
/**
|
||||
* Barème de cotisation par rôle fonctionnel au sein d'une organisation.
|
||||
*
|
||||
* <p>Permet de définir des montants différenciés selon le rôle du membre
|
||||
* (PRESIDENT, TRESORIER, MEMBRE_ORDINAIRE, etc.).
|
||||
*
|
||||
* <p>Si aucun barème n'est défini pour un rôle donné, le système utilise
|
||||
* le montant par défaut de {@link ParametresCotisationOrganisation}.
|
||||
*
|
||||
* <p>Table : {@code bareme_cotisation_role}
|
||||
*/
|
||||
@Entity
|
||||
@Table(
|
||||
name = "bareme_cotisation_role",
|
||||
uniqueConstraints = @UniqueConstraint(
|
||||
name = "uq_bareme_cot_org_role",
|
||||
columnNames = {"organisation_id", "role_org"}
|
||||
)
|
||||
)
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class BaremeCotisationRole extends BaseEntity {
|
||||
|
||||
@NotNull
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "organisation_id", nullable = false)
|
||||
private Organisation organisation;
|
||||
|
||||
/**
|
||||
* Rôle fonctionnel dans l'organisation (ex: PRESIDENT, TRESORIER, SECRETAIRE, MEMBRE_ORDINAIRE).
|
||||
* Correspond à {@link dev.lions.unionflow.server.entity.MembreOrganisation#getRoleOrg()}.
|
||||
*/
|
||||
@NotBlank
|
||||
@Column(name = "role_org", nullable = false, length = 50)
|
||||
private String roleOrg;
|
||||
|
||||
@Builder.Default
|
||||
@DecimalMin("0.00")
|
||||
@Digits(integer = 10, fraction = 2)
|
||||
@Column(name = "montant_mensuel", nullable = false, precision = 12, scale = 2)
|
||||
private BigDecimal montantMensuel = BigDecimal.ZERO;
|
||||
|
||||
@Builder.Default
|
||||
@DecimalMin("0.00")
|
||||
@Digits(integer = 10, fraction = 2)
|
||||
@Column(name = "montant_annuel", nullable = false, precision = 12, scale = 2)
|
||||
private BigDecimal montantAnnuel = BigDecimal.ZERO;
|
||||
|
||||
/** Description optionnelle du barème (ex: "Taux réduit bureau exécutif"). */
|
||||
@Column(name = "description", length = 255)
|
||||
private String description;
|
||||
}
|
||||
@@ -73,6 +73,15 @@ public class ParametresCotisationOrganisation extends BaseEntity {
|
||||
@Column(name = "cotisation_obligatoire", nullable = false)
|
||||
private Boolean cotisationObligatoire = true;
|
||||
|
||||
/**
|
||||
* Active la génération automatique mensuelle des cotisations pour cette organisation.
|
||||
* Quand {@code true}, un job planifié crée automatiquement une cotisation par membre actif
|
||||
* le 1er de chaque mois, en utilisant les barèmes par rôle ou le montant par défaut.
|
||||
*/
|
||||
@Builder.Default
|
||||
@Column(name = "generation_automatique_activee", nullable = false)
|
||||
private Boolean generationAutomatiqueActivee = false;
|
||||
|
||||
// ── Méthodes métier ────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user