Sprint Review & Rétrospective - Sprint 05 (Refonte de l'authentification par utilisateur)
Date de clôture : 09/07/2026 Effort planifié : 28 SP Statut du Sprint : CLOS avec résidus (résidus reportés au Sprint 06) Sources : Sprint Backlog 05 · tasks.md · rapport 08/07 · rapport 08/07 (session 3)
🎯 Objectif du Sprint (Sprint Goal)
Donner à chaque utilisateur son propre compte et livrer les trois parcours d'identité - se connecter / être créé / changer son PIN - en migrant du JWT « maison » vers Supabase Auth natif (auth.users + bcrypt), avec les rôles réels du brief (super_manager/manager/employee) et le multi-projets via project_members.
Objectif atteint. La dérive (JWT custom, rôle admin, members mono-projet, PIN 9999 codé en dur) est abandonnée ; l'application tourne sur la cible du handoff.
📢 Démonstration & Livrables
- Base de données cible jouée et vérifiée :
01_cleanup.sql+02_schema.sql(memberavecid = auth.users.id, pivotproject_members, FK distinctescreated_by/manager/owner,CHECKrôles/statuts/priorités, triggertouch_updated_at). - Seed Admin API (
npm run seed:members) : super manageradmin@engwe-france.fr+ 12 membres, bcrypt natif, rattachements projets OK. - RLS par périmètre (
05_rls_policies.sql) vérifiée à 3 sessions : super = tout, manager = son périmètre projet, employee = ses tâches (owner). - Workflow métier par trigger (
07_task_workflow.sql) : double validation (création + complétion), validation réservée aux managers du projet. - Les 3 parcours d'identité :
- Connexion : roster sans email (
/api/roster) +loginWithPin→signInWithPassword(session nativepersistSession, locale). - Création de membre : via
lib/authBackend.js(endpoint/api/member) branché surMemberModal(Admin API, contrôle du rôle appelant, 403 sinon). - Changement de PIN self-service :
ChangePinModal(supabase.auth.updateUser), refus du PIN par défaut, flagpin_customized.
- Connexion : roster sans email (
- Refonte front :
useData.jsx(nouveau),useAuth,App.jsxsur session native (suppressionsession_token/expiration maison/window.__forceAppRerender), 3 dashboards re-branchés sur le nouveau schéma, vue collaborateur multi-projets. - Bonus livrés (au-delà du backlog, tracés en ADR) :
📊 Avancement des Stories
| Story | Description | SP | Statut |
|---|---|---|---|
| US-AUTH-01 | Nettoyage base & schéma cible auth.users |
5 | ✅ Complété |
| US-AUTH-02 | Connexion via Supabase Auth natif | 5 | ✅ Complété |
| US-INSCR-03 | Création de membre par un admin | 5 | ✅ Complété (via endpoint /api/member plutôt qu'Edge Function) |
| US-PIN-04 | Changement de PIN self-service | 3 | ✅ Complété |
| US-RLS-05 | RLS par rôles réels + Realtime | 3 | ✅ Complété |
| US-AUTH-06 | Refonte front de la couche session | 5 | ✅ Complété |
| US-DOC-07 | Réalignement documentaire & backlog | 2 | 🟠 Partiel - reporté au Sprint 06 |
Vélocité : 26 / 28 SP.
🔻 Résidus reportés au Sprint 06
- US-DOC-07 (fin) : finaliser
product_backlog.md(US1.1/US1.2 : comptes individuels, rôles réels, RLSauth.uid()),README.md,docs/supabase_schema.sql; documenter les procédures inscription + changement de PIN. - Tests e2e Playwright (
e2e/auth.spec.js) : encore sur les routes supprimées (/api/public_data,/api/auth, bouton « Super Manager · Vue globale »). À réécrire pour le flux roster //api/login. - Vérification sauvegarde/restauration JSON (US5.1 du brief) :
storage.jsa été vidé lors de la migration ; confirmer queBackupButtonsfonctionne encore sur le nouveau schéma (ou l'adapter). create-memberEdge Function : implémentée en endpoint serveur (/api/member) - décision assumée ; conserver ou migrer en Edge Function selon la cible de déploiement.
🧠 Rétrospective
Ce qui a bien fonctionné
- La migration vers l'auth native supprime toute une classe de dette (JWT maison, secrets côté client, rôle
adminfantôme). - Le socle base (schéma + RLS + trigger) a été validé par des scripts reproductibles (
test:login,test:workflow) avant de toucher au front. - Décisions d'architecture systématiquement tracées en ADR (0002 → 0007).
Axes d'amélioration & points de vigilance
- Hygiène de suivi :
tasks.mdest resté avec des cases[ ]alors que le travail était fait et committé - le suivi Kanban doit refléter l'état réel en fin de sprint. - Statut de sprint : le sprint est resté « OUVERT » alors qu'il était livré ; clôturer au fil de l'eau.
- Sécurité PIN : le suffixe de mot de passe n'ajoute aucune sécurité - c'est le rate limiting qui protège. Le vrai pepper serveur est tracé et reporté en ADR 0007 (v2).
- Déploiement : la recommandation « ne pas déployer l'auth de la dérive » a été suivie ; le déploiement Netlify (ex-Sprint 04 bis) est à reprogrammer sur la version auth native (voir clôture Sprint 04 bis).
✅ Vérifications de clôture (08–09/07)
npm run test ✅ · npm run build ✅ · npm run reset:pins 13/13 ✅ · npm run test:login ✅ · npm run test:workflow ✅ · rate limiter ✅
