Documentation — Script de test RBAC¶
Fichier : BackEnd/tests/rbac/test-rbac.sh
Créé le : 2026-06-23
Auteur : Hermes Agent (Claude)
Qu'est-ce que ce script ?¶
Ce script teste que chaque profil utilisateur de la plateforme ESM accède uniquement aux routes auxquelles il a le droit — ni plus, ni moins. C'est un test de contrôle d'accès (RBAC — Role-Based Access Control).
Il simule 8 utilisateurs réels qui se connectent à l'API et appelle les routes clés du
backend en vérifiant que les réponses HTTP sont conformes aux permissions définies dans
le seed (BackEnd/prisma/seeds/seed.ts).
Comment l'exécuter¶
Prérequis¶
- Le backend doit tourner sur
http://localhost:4100 - Les comptes test doivent exister en base (voir
BackEnd/prisma/create-comptes-test.ts)
Vérifier que le backend tourne¶
curl -s http://localhost:4100/_health | python3 -m json.tool
Réinitialiser les comptes test si nécessaire¶
cd BackEnd
npx tsx prisma/create-comptes-test.ts
Lancer le script¶
bash BackEnd/tests/rbac/test-rbac.sh
Ce que le script vérifie¶
Pour chaque profil, le script :
1. Se connecte avec les identifiants du compte test → récupère un JWT
2. Appelle les routes autorisées → vérifie que le code HTTP est 200
3. Appelle les routes interdites → vérifie que le code HTTP est 403
Profils testés¶
| # | Profil | Email de test | Mot de passe |
|---|---|---|---|
| 1 | PSYCHOLOGUE | test.agent@projetesm.test |
TestAgent2026! |
| 2 | ASSISTANT SOCIAL | assistant.social.test@esm.local |
AsSo@Test2026! |
| 3 | MEAL COMMUNAL | test.meal.communal@projetesm.test |
TestMeal2026! |
| 4 | MEAL NATIONAL | test.meal.national@projetesm.test |
TestMeal2026! |
| 5 | CHARGÉ DE PROJET | test.charge.projet@projetesm.test |
TestCharge2026! |
| 6 | BAILLEUR AFD | test.bailleur@projetesm.test |
TestBailleur2026! |
| 7 | ADMIN | test.admin@projetesm.test |
TestAdmin2026! |
| 8 | SUPER ADMIN | test.super.admin@projetesm.test |
TestSuperAdmin2026! |
Routes testées par profil¶
| Route | PSYCHO | AS | MEAL-C | MEAL-N | CHARGE | BAILLEUR | ADMIN | SUPER |
|---|---|---|---|---|---|---|---|---|
GET /esm/enfants |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
GET /esm/accompagnements |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
GET /esm/tuteurs |
✅ | ✅ | — | — | — | — | — | — |
GET /esm/maitres-coraniques |
✅ | — | — | — | — | — | — | — |
GET /esm/parents |
✅ | — | — | — | — | — | — | — |
GET /esm/formations |
✅ | ✅ | — | — | ✅ | — | — | — |
GET /esm/insertion |
✅ | — | — | — | ✅ | — | — | — |
GET /mobilisation/comites |
✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ | ✅ |
GET /pilotage/indicateurs |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
GET /pilotage/etudes |
— | — | ✅ | — | — | — | — | — |
GET /esm/rapports/tableau-de-bord |
❌ | — | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
GET /esm/audit/logs |
❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
GET /esm/administration/utilisateurs |
❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
GET /esm/referentiels/communes |
— | — | — | — | — | — | ✅ | ✅ |
✅ = autorisé (200) · ❌ = interdit (403) · — = non testé pour ce profil
Résultat de référence (2026-06-23)¶
Total : 66 tests
Réussis : 66
Échoués : 0
✔ TOUS LES TESTS PASSENT — RBAC CONFORME
Mise à jour 2026-06-23 : +2 tests — INDICATEUR_LIRE ajouté à PSYCHOLOGUE et ASSISTANT_SOCIAL.
Rapport complet : Documents/TestsProfils/20260623_1435_rapport-tests-rbac.md
Quand relancer ce script ?¶
Relancer après toute modification touchant :
- Une route : ajout, suppression ou changement de permission sur une route dans un fichier
*.module.routes.ts - Le middleware RBAC :
BackEnd/src/shared/infrastructure/http/middlewares/autoriser.middleware.ts - Les permissions d'un profil : modification de la matrice dans
BackEnd/prisma/seeds/seed.ts+npx prisma db push - Un nouveau module : vérifier que les nouvelles routes ont bien les bonnes permissions
- Avant un déploiement manuel en production
Limitation connue¶
Le rate limiter de l'endpoint d'authentification est fixé à 10 requêtes / 15 minutes par IP.
Le script effectue 8 connexions (une par profil). Si d'autres appels à /api/auth/connexion
ont eu lieu récemment depuis la même IP, le script peut être bloqué avec 429 Too Many Requests.
Solution : attendre 15 minutes ou relancer le backend (remet le store en mémoire à zéro).