Rôle modérateur + gestion des comptes admin/modérateur
- Nouveau rôle users.role='moderator' (contrainte CHECK migrée via DROP+ADD CONSTRAINT, idempotent) : accès à Membres, Rencontres, Inscriptions uniquement. Dashboard, Catégories (écriture), Contenu du site, Demandes d'adhésion et gestion des comptes restent admin-only, imposé côté serveur (requireAuth accepte désormais un tableau de rôles) - Nouvel onglet « Administrateurs » (admin-only) : créer un compte admin ou modérateur (mot de passe temporaire généré, même mécanique que pour les membres — visible tant que non changé, changement forcé à la première connexion), réinitialiser l'accès, promouvoir/rétrograder, supprimer. Garde-fous : impossible de se supprimer ou de se rétrograder soi-même, impossible de supprimer le dernier administrateur - users.full_name (colonne migrée) pour l'affichage des comptes staff - AccessCell/CredentialsModal extraits dans AccessControls.jsx, partagés entre la gestion des membres et celle des comptes admin/modérateur - AdminShell filtre ses onglets par rôle ; Espace.jsx route admin et modérateur vers le back-office Corrigé en cours de route : GET /api/admin/categories doit rester lisible par les modérateurs (nécessaire au formulaire membre) même si sa gestion en écriture reste admin-only — sans quoi le Promise.all du frontend échouait silencieusement et vidait la liste des membres. Vérifié : 34 + 21 tests existants toujours au vert, 26 nouveaux tests de permissions par rôle, parcours navigateur complet (création modérateur, connexion, changement forcé, menu restreint, accès aux membres). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fkg15RCxNgUys4ru73He2o
This commit is contained in:
15 files changed
+514
-144
No files matched your search
@@ -75,6 +75,9 @@ s'ils n'en ont pas déjà un :
|
||||
| Admin | `admin@sluc-businessclub.fr` | `ADMIN_INITIAL_PASSWORD` (défaut : `SlucAdmin2026!`) |
|
||||
| Membre (×12) | email de contact de chaque entreprise de démo, ex. `contact@lorraine-assurances.fr` | `MEMBER_INITIAL_PASSWORD` (défaut : `SlucMembre2026!`) |
|
||||
|
||||
D'autres comptes administrateur ou modérateur se créent depuis le back-office
|
||||
(onglet « Administrateurs », réservé aux admins) — voir ci-dessous.
|
||||
|
||||
Changez le mot de passe admin après la première connexion (Espace membre/admin →
|
||||
formulaire « Mot de passe », endpoint `POST /api/auth/change-password`).
|
||||
|
||||
@@ -106,7 +109,19 @@ l'utilisateur est bloqué sur un écran de changement obligatoire avant d'accéd
|
||||
des octets magiques côté serveur).
|
||||
- Bannière d'état d'adhésion (validée / à renouveler) et changement de mot de passe.
|
||||
|
||||
**Rôles du back-office**
|
||||
- **Administrateur** : accès complet — tableau de bord, membres, rencontres, inscriptions,
|
||||
catégories, contenu du site, et gestion des comptes administrateurs/modérateurs.
|
||||
- **Modérateur** : accès restreint aux membres, aux rencontres et aux inscriptions
|
||||
(opérations du quotidien) ; pas de tableau de bord, pas de catégories, pas de contenu
|
||||
du site, pas de gestion des comptes. Un modérateur peut être promu administrateur (et
|
||||
inversement) depuis l'onglet « Administrateurs ». Le système empêche de se supprimer
|
||||
ou de se rétrograder soi-même, et de supprimer le dernier compte administrateur restant.
|
||||
|
||||
**Espace admin** (rôle `admin`)
|
||||
- Administrateurs : création de comptes administrateur ou modérateur (mot de passe
|
||||
temporaire généré, changement obligatoire à la première connexion — même mécanique
|
||||
que pour les membres), réinitialisation d'accès, promotion/rétrogradation, suppression.
|
||||
- Tableau de bord : indicateurs temps réel, dernières inscriptions, prochaines rencontres.
|
||||
- Membres : création, édition, validation/suspension par saison (1er sept. → 31 août). La création
|
||||
d'un membre avec email génère automatiquement un mot de passe temporaire, affiché à l'admin et
|
||||
@@ -128,8 +143,11 @@ l'utilisateur est bloqué sur un écran de changement obligatoire avant d'accéd
|
||||
derrière HTTPS).
|
||||
- **CSRF** : cookie SameSite=Strict + vérification de l'en-tête `Origin` sur toutes
|
||||
les mutations.
|
||||
- **Autorisation** : middleware de rôles (`member` / `admin`) sur chaque route protégée ;
|
||||
un membre ne peut modifier que sa propre fiche.
|
||||
- **Autorisation** : middleware de rôles (`member` / `moderator` / `admin`) sur chaque
|
||||
route protégée ; un membre ne peut modifier que sa propre fiche ; les routes
|
||||
administratives sensibles (catégories en écriture, contenu du site, demandes
|
||||
d'adhésion, gestion des comptes) restent strictement admin-only même si un
|
||||
modérateur est authentifié.
|
||||
- **Validation** : schémas `zod` sur toutes les entrées (types, longueurs, formats),
|
||||
contraintes `CHECK` en base en seconde ligne.
|
||||
- **Rate limiting** : global (300/min), connexion (10 / 15 min), formulaires publics
|
||||
|
||||
Reference in new issue
Block a user