DOC
Accueil/ Projets/ MJY Task Platform/ Sprint Review & Rétrospective - Sprint 05 (Refonte de l'authentification par utilisateur)

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 (member avec id = auth.users.id, pivot project_members, FK distinctes created_by/manager/owner, CHECK rôles/statuts/priorités, trigger touch_updated_at).
  • Seed Admin API (npm run seed:members) : super manager admin@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) + loginWithPinsignInWithPassword (session native persistSession, locale).
    • Création de membre : via lib/authBackend.js (endpoint /api/member) branché sur MemberModal (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, flag pin_customized.
  • Refonte front : useData.jsx (nouveau), useAuth, App.jsx sur session native (suppression session_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) :
    • Archivage doux des tâches (onglet Archives) - ADR 0005.
    • Rate limiting anti brute-force (5 échecs → verrou 15 min) + centralisation du format de PIN (lib/pinPassword.js) - ADR 0006.
    • Édition de tâche par brouillon (fin de la sauvegarde auto).

📊 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

  1. US-DOC-07 (fin) : finaliser product_backlog.md (US1.1/US1.2 : comptes individuels, rôles réels, RLS auth.uid()), README.md, docs/supabase_schema.sql ; documenter les procédures inscription + changement de PIN.
  2. 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.
  3. Vérification sauvegarde/restauration JSON (US5.1 du brief) : storage.js a été vidé lors de la migration ; confirmer que BackupButtons fonctionne encore sur le nouveau schéma (ou l'adapter).
  4. create-member Edge 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 admin fantô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.md est 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