Matrice des permissions — Plateforme ESM (état au 2026-07-11)¶
Périmètre : toute l'application (backend + frontend).
Source de vérité : BackEnd/prisma/seeds/seed.ts — vérifiée exécutable de bout en bout et
réappliquée en base le jour même (voir note méthodologique en fin de document).
Frontend : aligné sur cette matrice depuis le chantier A du 2026-07-11 — les gates UI
(routes, menu, boutons) reflètent désormais la permission réellement vérifiée par la route
backend correspondante, plus de rôles codés en dur.
Document précédent (20260623_1808_matrice-permissions-profils.md, 32 permissions) :
obsolète, remplacé par celui-ci — daté d'avant plusieurs corrections RBAC majeures
(2026-06-24, 2026-07-08, 2026-07-11 matin et après-midi).
Légende : ✅ accordée · ❌ non accordée
Mise à jour 2026-07-11 (~13:50) : CONCERTATION_GERER ajoutée à PSYCHOLOGUE/ASSISTANT_SOCIAL
(cf. note historique conservée plus bas) — Bernard tranché : oubli confirmé, corrigé comme
INSERTION_MODIFIER. Tableau et détail par profil mis à jour en conséquence (24/39 désormais).
Vue d'ensemble — 39 permissions × 8 profils¶
| Permission | PSYCHO | AS | MEAL-C | MEAL-N | CHARGE | BAILLEUR | ADMIN | SUPER |
|---|---|---|---|---|---|---|---|---|
| — ENFANTS — | ||||||||
ENFANT_LIRE |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ENFANT_CREER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
ENFANT_MODIFIER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
ENFANT_VALIDER |
❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| — ACCOMPAGNEMENT — | ||||||||
ACCOMPAGNEMENT_LIRE |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ACCOMPAGNEMENT_CREER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
SUIVI_CREER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
CAS_ORIENTE_CREER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
APPUI_ALIMENTAIRE_GERER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
SOUTIEN_PSYCHOLOGIQUE_GERER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
PRISE_EN_CHARGE_SANITAIRE_GERER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
SEANCE_ALPHABETISATION_GERER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
ACCOMPAGNEMENT_VALIDER |
❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| — ACTEURS — (maîtres coraniques, tuteurs, parents, insertion — voir note) | ||||||||
ACTEUR_LIRE |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ACTEUR_CREER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
ACTEUR_MODIFIER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
ACTEUR_VALIDER |
❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| — FORMATIONS — | ||||||||
FORMATION_LIRE |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
FORMATION_CREER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
SUPPORT_GERER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
FORMATION_VALIDER |
❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| — INSERTION — | ||||||||
INSERTION_LIRE |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
INSERTION_CREER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
INSERTION_MODIFIER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
INSERTION_VALIDER |
❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| — MOBILISATION — | ||||||||
MOBILISATION_LIRE |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
COMITE_GERER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
CONCERTATION_GERER |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
MOBILISATION_VALIDER |
❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| — PILOTAGE — | ||||||||
INDICATEUR_LIRE |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
INDICATEUR_CALCULER |
❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
INDICATEUR_CREER |
❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ |
ETUDE_LIRE |
❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ETUDE_CREER |
❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ |
ETUDE_VALIDER |
❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
RAPPORT_EXPORTER |
❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| — ADMIN — | ||||||||
UTILISATEUR_GERER |
❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
REFERENTIEL_MODIFIER |
❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
EQUIPE_GERER |
❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| — AUDIT — | ||||||||
AUDIT_LIRE |
❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| — SYSTEM — | ||||||||
ACCES_TOUTES_COMMUNES |
❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Total accordées | 24 | 24 | 18 | 21 | 10 | 10 | 41 | 41 |
PSYCHO = PSYCHOLOGUE · AS = ASSISTANT_SOCIAL · MEAL-C = MEAL_COMMUNAL · MEAL-N = MEAL_NATIONAL CHARGE = CHARGE_PROJET · ADMIN = ADMIN · SUPER = SUPER_ADMIN
Historique CONCERTATION_GERER (résolu) : à la première version de ce document, ni
PSYCHOLOGUE ni ASSISTANT_SOCIAL ne l'avaient dans le seed (contrairement à COMITE_GERER, qu'ils
ont tous les deux) — signalé sans être corrigé, en attente d'arbitrage. Bernard a confirmé le
2026-07-11 (~13:50) qu'il s'agissait bien d'un oubli, même profil que INSERTION_MODIFIER —
ajoutée à agentTerrain dans seed.ts, réappliquée en base, vérifiée par appel HTTP réel
(psychologue.test : 24 permissions dont CONCERTATION_GERER). Tableau ci-dessus déjà à jour.
Détail par profil¶
PSYCHOLOGUE et ASSISTANT_SOCIAL — agents de terrain (24/39)¶
Saisie et mise en œuvre au niveau de leur commune d'affectation uniquement (communeCode sur
leur compte, pas de permission ACCES_TOUTES_COMMUNES).
Enfants : LIRE, CREER, MODIFIER
Accompagnement : LIRE, CREER, SUIVI_CREER, CAS_ORIENTE_CREER,
APPUI_ALIMENTAIRE_GERER, SOUTIEN_PSYCHOLOGIQUE_GERER,
PRISE_EN_CHARGE_SANITAIRE_GERER, SEANCE_ALPHABETISATION_GERER
Acteurs : LIRE, CREER, MODIFIER (maîtres coraniques, tuteurs, parents)
Formations : LIRE, CREER
Insertion : LIRE, CREER, MODIFIER
Mobilisation : LIRE, COMITE_GERER, CONCERTATION_GERER
Sensibilisation: SUPPORT_GERER (éducateurs pairs, radio, affiches, traductions, distributions)
Pilotage : INDICATEUR_LIRE
Ni l'un ni l'autre n'a de droit de validation (*_VALIDER) sur ses propres données — c'est le
rôle du MEAL. Aucun accès à Pilotage/Études/Rapports au-delà de la lecture d'indicateurs.
MEAL_COMMUNAL — contrôle qualité communal (18/39)¶
Ne crée ni ne modifie jamais de donnée de mise en œuvre — uniquement lecture + validation/ demande de correction, sur sa commune d'affectation.
= Lecture (LIRE) sur tous les modules métier +
Validation : ENFANT_VALIDER, ACCOMPAGNEMENT_VALIDER, ACTEUR_VALIDER, FORMATION_VALIDER,
INSERTION_VALIDER, MOBILISATION_VALIDER, ETUDE_VALIDER
Pilotage : INDICATEUR_CALCULER, RAPPORT_EXPORTER
Admin : EQUIPE_GERER (gestion des agents de terrain de sa commune)
MEAL_NATIONAL — contrôle qualité national (21/39)¶
Identique à MEAL_COMMUNAL + ACCES_TOUTES_COMMUNES + création du référentiel d'indicateurs et
des études diagnostiques (spécialité MEAL national, pas une sous-activité de terrain) :
ETUDE_CREER, INDICATEUR_CREER.
CHARGE_PROJET et BAILLEUR — consultation stratégique (10/39 chacun)¶
Permissions strictement identiques (le bailleur de fonds AFD a le même paquet lecture seule que le chargé de projet Caritas) :
Lecture (LIRE) : Enfants, Accompagnement, Acteurs, Formations, Insertion, Mobilisation,
Indicateurs, Études
Pilotage : RAPPORT_EXPORTER
System : ACCES_TOUTES_COMMUNES
C'est l'identité de ce paquet entre CHARGE_PROJET et BAILLEUR qui a permis de repérer, le 2026-07-11, que le frontend excluait BAILLEUR de Pilotage/Mobilisation/Référencements reçus alors que CHARGE_PROJET y accédait — corrigé dans le cadre du chantier d'alignement (voir journal lié).
ADMIN et SUPER_ADMIN — accès total (41/41)¶
Aucune permission métier retenue — accès à tout, y compris administration des utilisateurs
(UTILISATEUR_GERER), modification des référentiels (REFERENTIEL_MODIFIER) et consultation des
journaux d'audit (AUDIT_LIRE), strictement réservés à ces deux profils.
Isolation par commune (scope)¶
| Profil | Communes accessibles |
|---|---|
| PSYCHOLOGUE / ASSISTANT_SOCIAL | Commune d'affectation uniquement |
| MEAL_COMMUNAL | Commune d'affectation uniquement |
| MEAL_NATIONAL | Toutes (ACCES_TOUTES_COMMUNES) |
| CHARGE_PROJET | Toutes (ACCES_TOUTES_COMMUNES) |
| BAILLEUR | Toutes (ACCES_TOUTES_COMMUNES) |
| ADMIN / SUPER_ADMIN | Toutes (ACCES_TOUTES_COMMUNES) |
Mécanisme (corrigé le 2026-07-11) : ServiceAutorisationDonnees.construireScopeCommune()
vérifie désormais la permission ACCES_TOUTES_COMMUNES dans permissionCodes[] (chargée en
base à chaque requête), et non plus une liste de rôles codée en dur limitée à 4 endroits. Appliqué
de façon uniforme sur les 17 modules qui filtrent des données par commune. Avant cette date, le
scope "toutes communes" ne fonctionnait réellement que sur 4 endpoints du module Pilotage —
partout ailleurs, un profil national ne voyait "toutes les communes" que si son propre
communeCode était null en base, par chance de données plutôt que par garantie de code.
Alignement frontend (chantier A, 2026-07-11)¶
Le frontend reflète désormais fidèlement cette matrice — plus de rôles codés en dur dupliqués :
authStoreportepermissionCodes[](reçu à la connexion, y compris via 2FA et code de secours), persistant comme le reste du profil.usePermission('CODE')/possedePermission()remplacent les anciens tableauxROLES_*.ProtectedRoute,Router.tsx,Sidebar.tsxet les boutons d'action (créer/modifier/valider/ calculer) sont câblés sur la permission réellement vérifiée par la route backend correspondante — pas une permission supposée par le nom du module.- Écran admin
/administration/permissions(édition profil ↔ permission en base) : désormais réellement utile — modifier une permission en base change immédiatement ce que l'utilisateur voit côté UI, sans redéploiement.
Détail complet du chantier : ProjetESM/debug/20260711_1130_journal-matrice-permissions-rbac.
Particularités à connaître (regroupements de permissions moins granulaires que le module)¶
ACTEUR_*couvre 4 entités distinctes : maîtres coraniques, tuteurs, parents, et le module Insertion socio-économique (jusqu'au 2026-07-11 ; Insertion a désormais ses propres permissionsINSERTION_*, voir ci-dessous). Une seule permissionACTEUR_LIRE/CREER/MODIFIERgouverne encore MaîtresCoraniques/Tuteurs/Parents malgré leur nature différente.SUPPORT_GERERcouvre 6 sous-modules de Sensibilisation (éducateurs pairs, émissions radio, poses d'affiches, supports de communication, traductions, distributions) sans granularité — et couvre à la fois la lecture et l'écriture (pas deSUPPORT_LIREséparée). Conséquence assumée le 2026-07-11 : seuls agentTerrain et ADMIN/SUPER_ADMIN peuvent voir cette section, MEAL et CHARGE_PROJET/BAILLEUR ne l'ont jamais pu (côté backend) même si le frontend le suggérait avant la correction.- Formations (session de formation) ≠ Sensibilisation : deux entités distinctes gouvernées par
des permissions différentes (
FORMATION_*vsSUPPORT_GERER), toutes deux affichées sous des libellés proches dans le menu. CAS_ORIENTE_CREERgouverne spécifiquement la création/modification/suppression des cas orientés (recâblé le 2026-07-11 depuisACCOMPAGNEMENT_CREER), tandis que leur lecture reste sousACCOMPAGNEMENT_LIRE(pas de permission de lecture dédiée).
Note méthodologique — pourquoi ce document est fiable aujourd'hui, pas nécessairement demain¶
Cette matrice reflète l'état de seed.ts tel qu'exécuté avec succès le 2026-07-11 à 13:31,
vérifié par appels HTTP réels (login + inspection de permissionCodes[] retourné). Point de
vigilance découvert ce jour : seed.ts était cassé (référence à un modèle Prisma supprimé) depuis
le 2026-07-10 et n'avait donc probablement pas pu s'exécuter de bout en bout depuis — la base
réelle avait dérivé du fichier source (ex. psychologue.test avait RAPPORT_EXPORTER en trop).
Avant de faire confiance à ce document dans le futur, si un doute existe sur la fraîcheur des
données : relancer npx tsx prisma/seeds/seed.ts depuis BackEnd/ et vérifier qu'il se termine
par "Seed terminé avec succès !" sans erreur — sinon la base peut avoir dérivé du fichier source
sans que personne ne le sache, comme cela s'est produit ici pendant environ 24h.
Liens connexes¶
- ProjetESM/debug/20260711_1130_journal-matrice-permissions-rbac — audit complet, chantier d'alignement frontend, corrections détaillées, journal en direct heure par heure
- ProjetESM/Documents/20260711_1210_explication-rbac-vs-permission-based — pédagogie RBAC role-based vs permission-based (modèle NIST à 3 niveaux)
- ProjetESM/architecture/systeme-rbac-permissions — conception RBAC d'origine (2026-06-14), à mettre à jour pour refléter cet état
- ProjetESM/Documents/20260623_1808_matrice-permissions-profils — version précédente, obsolète
- ProjetESM/index — index du projet