ujusum:2-implantation:2-authentification
Différences
Ci-dessous, les différences entre deux révisions de la page.
| ujusum:2-implantation:2-authentification [2026/06/20 15:23] – créée 88.174.75.218 | ujusum:2-implantation:2-authentification [2026/06/29 22:01] (Version actuelle) – supprimée 83.202.252.200 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== Sprint 1 — Module Authentification ====== | ||
| - | ===== Objectif du Sprint ===== | ||
| - | |||
| - | Mettre en place l' | ||
| - | |||
| - | À l' | ||
| - | |||
| - | * Un utilisateur peut créer un compte | ||
| - | * Un utilisateur peut se connecter | ||
| - | * Un utilisateur peut rafraîchir sa session | ||
| - | * Un utilisateur peut gérer son profil | ||
| - | * Les rôles sont opérationnels | ||
| - | * Les permissions sont opérationnelles | ||
| - | * Les routes sont protégées | ||
| - | * Swagger documente l' | ||
| - | * Les tests sont automatisés | ||
| - | |||
| - | Ce sprint débloque l' | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== Périmètre ====== | ||
| - | |||
| - | ===== Module Auth ===== | ||
| - | |||
| - | < | ||
| - | AuthModule | ||
| - | |||
| - | UsersModule | ||
| - | |||
| - | RolesModule | ||
| - | |||
| - | PermissionsModule | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== User Stories ====== | ||
| - | |||
| - | ===== US-001 : Création de compte ===== | ||
| - | |||
| - | **En tant que visiteur** | ||
| - | |||
| - | Je souhaite créer un compte | ||
| - | |||
| - | Afin de pouvoir utiliser la plateforme. | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Critères d' | ||
| - | |||
| - | * Email obligatoire | ||
| - | * Email unique | ||
| - | * Mot de passe obligatoire | ||
| - | * Hash BCrypt | ||
| - | * Compte créé en base | ||
| - | * Profil créé automatiquement | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Endpoint ===== | ||
| - | |||
| - | <code http> | ||
| - | POST / | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== DTO ===== | ||
| - | |||
| - | <code ts> | ||
| - | export class RegisterDto { | ||
| - | |||
| - | email: string; | ||
| - | |||
| - | password: string; | ||
| - | |||
| - | firstName: string; | ||
| - | |||
| - | lastName: string; | ||
| - | |||
| - | } | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== US-002 : Connexion ====== | ||
| - | |||
| - | **En tant qu' | ||
| - | |||
| - | Je souhaite me connecter | ||
| - | |||
| - | Afin d' | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Critères d' | ||
| - | |||
| - | * Vérification email | ||
| - | * Vérification mot de passe | ||
| - | * JWT généré | ||
| - | * Refresh Token généré | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Endpoint ===== | ||
| - | |||
| - | <code http> | ||
| - | POST /auth/login | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Réponse ===== | ||
| - | |||
| - | <code json> | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== US-003 : Rafraîchissement du token ====== | ||
| - | |||
| - | ===== Endpoint ===== | ||
| - | |||
| - | <code http> | ||
| - | POST / | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Critères ===== | ||
| - | |||
| - | * Refresh valide | ||
| - | * Nouveau JWT | ||
| - | * Nouveau Refresh Token | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== US-004 : Déconnexion ====== | ||
| - | |||
| - | ===== Endpoint ===== | ||
| - | |||
| - | <code http> | ||
| - | POST / | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Critères ===== | ||
| - | |||
| - | * Refresh Token invalidé | ||
| - | * Session fermée | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== US-005 : Consultation profil ====== | ||
| - | |||
| - | ===== Endpoint ===== | ||
| - | |||
| - | <code http> | ||
| - | GET /users/me | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Réponse ===== | ||
| - | |||
| - | <code json> | ||
| - | { | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== US-006 : Modification profil ====== | ||
| - | |||
| - | ===== Endpoint ===== | ||
| - | |||
| - | <code http> | ||
| - | PUT /users/me | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== US-007 : Gestion des rôles ====== | ||
| - | |||
| - | ===== Rôles ===== | ||
| - | |||
| - | < | ||
| - | SUPER_ADMIN | ||
| - | |||
| - | ADMIN_AGENCE | ||
| - | |||
| - | GESTIONNAIRE | ||
| - | |||
| - | COMMERCIAL | ||
| - | |||
| - | PROPRIETAIRE | ||
| - | |||
| - | CLIENT | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Tables ===== | ||
| - | |||
| - | < | ||
| - | roles | ||
| - | |||
| - | permissions | ||
| - | |||
| - | user_roles | ||
| - | |||
| - | role_permissions | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== US-008 : Contrôle d' | ||
| - | |||
| - | ===== Exemple ===== | ||
| - | |||
| - | <code ts> | ||
| - | @Roles(' | ||
| - | |||
| - | @Get() | ||
| - | findAll() {} | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Critères ===== | ||
| - | |||
| - | * Vérification rôle | ||
| - | * Vérification permission | ||
| - | * Refus si accès interdit | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== Architecture Backend ====== | ||
| - | |||
| - | ===== Module Auth ===== | ||
| - | |||
| - | < | ||
| - | src/ | ||
| - | |||
| - | ├── controllers | ||
| - | │ | ||
| - | ├── services | ||
| - | │ | ||
| - | ├── guards | ||
| - | │ | ||
| - | ├── strategies | ||
| - | │ | ||
| - | ├── dto | ||
| - | │ | ||
| - | ├── entities | ||
| - | │ | ||
| - | └── tests | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Controllers ===== | ||
| - | |||
| - | < | ||
| - | AuthController | ||
| - | |||
| - | UserController | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Services ===== | ||
| - | |||
| - | < | ||
| - | AuthService | ||
| - | |||
| - | TokenService | ||
| - | |||
| - | PasswordService | ||
| - | |||
| - | UserService | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Guards ===== | ||
| - | |||
| - | < | ||
| - | JwtAuthGuard | ||
| - | |||
| - | RolesGuard | ||
| - | |||
| - | PermissionsGuard | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Strategies ===== | ||
| - | |||
| - | < | ||
| - | JwtStrategy | ||
| - | |||
| - | RefreshTokenStrategy | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== Entités Prisma ====== | ||
| - | |||
| - | ===== User ===== | ||
| - | |||
| - | <code prisma> | ||
| - | model User { | ||
| - | |||
| - | id | ||
| - | |||
| - | email String @unique | ||
| - | |||
| - | passwordHash | ||
| - | |||
| - | status | ||
| - | |||
| - | profile | ||
| - | |||
| - | roles UserRole[] | ||
| - | |||
| - | } | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== UserProfile ===== | ||
| - | |||
| - | <code prisma> | ||
| - | model UserProfile { | ||
| - | |||
| - | id String @id @default(uuid()) | ||
| - | |||
| - | userId | ||
| - | |||
| - | firstName | ||
| - | |||
| - | lastName | ||
| - | |||
| - | phone | ||
| - | |||
| - | } | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Role ===== | ||
| - | |||
| - | <code prisma> | ||
| - | model Role { | ||
| - | |||
| - | id String @id @default(uuid()) | ||
| - | |||
| - | code String @unique | ||
| - | |||
| - | name String | ||
| - | |||
| - | } | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== Sécurité ====== | ||
| - | |||
| - | ===== JWT ===== | ||
| - | |||
| - | < | ||
| - | Durée : | ||
| - | |||
| - | 1 heure | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Refresh Token ===== | ||
| - | |||
| - | < | ||
| - | Durée : | ||
| - | |||
| - | 30 jours | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Hash ===== | ||
| - | |||
| - | < | ||
| - | bcrypt | ||
| - | |||
| - | 12 rounds | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Headers ===== | ||
| - | |||
| - | < | ||
| - | Authorization: | ||
| - | |||
| - | Bearer < | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== Swagger ====== | ||
| - | |||
| - | ===== Tags ===== | ||
| - | |||
| - | < | ||
| - | Auth | ||
| - | |||
| - | Users | ||
| - | |||
| - | Roles | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Endpoints documentés ===== | ||
| - | |||
| - | < | ||
| - | POST / | ||
| - | |||
| - | POST /auth/login | ||
| - | |||
| - | POST / | ||
| - | |||
| - | POST / | ||
| - | |||
| - | GET /users/me | ||
| - | |||
| - | PUT /users/me | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== Frontend ====== | ||
| - | |||
| - | ===== Pages ===== | ||
| - | |||
| - | < | ||
| - | /login | ||
| - | |||
| - | /register | ||
| - | |||
| - | / | ||
| - | |||
| - | /profile | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Forms ===== | ||
| - | |||
| - | < | ||
| - | RegisterForm | ||
| - | |||
| - | LoginForm | ||
| - | |||
| - | ProfileForm | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Hooks ===== | ||
| - | |||
| - | < | ||
| - | useLogin() | ||
| - | |||
| - | useRegister() | ||
| - | |||
| - | useProfile() | ||
| - | |||
| - | useRefreshToken() | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== Tests ====== | ||
| - | |||
| - | ===== Unitaires ===== | ||
| - | |||
| - | < | ||
| - | AuthService | ||
| - | |||
| - | UserService | ||
| - | |||
| - | TokenService | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Intégration ===== | ||
| - | |||
| - | < | ||
| - | Register Flow | ||
| - | |||
| - | Login Flow | ||
| - | |||
| - | Refresh Flow | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== E2E ===== | ||
| - | |||
| - | < | ||
| - | Register | ||
| - | |||
| - | ↓ | ||
| - | |||
| - | Login | ||
| - | |||
| - | ↓ | ||
| - | |||
| - | Access Protected Route | ||
| - | |||
| - | ↓ | ||
| - | |||
| - | Logout | ||
| - | </ | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== Définition de terminé ====== | ||
| - | |||
| - | Le Sprint 1 est terminé lorsque : | ||
| - | |||
| - | * Register fonctionne | ||
| - | * Login fonctionne | ||
| - | * JWT fonctionne | ||
| - | * Refresh fonctionne | ||
| - | * RBAC fonctionne | ||
| - | * Profil fonctionne | ||
| - | * Swagger fonctionne | ||
| - | * Tests verts | ||
| - | * CI verte | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== Livrables ====== | ||
| - | |||
| - | * AuthModule | ||
| - | * UserModule | ||
| - | * RoleModule | ||
| - | * DTO | ||
| - | * Prisma Models | ||
| - | * Swagger | ||
| - | * Tests | ||
| - | * Documentation | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== Démonstration Sprint ====== | ||
| - | |||
| - | Scénario de validation : | ||
| - | |||
| - | < | ||
| - | 1. Création compte | ||
| - | |||
| - | 2. Connexion | ||
| - | |||
| - | 3. Réception JWT | ||
| - | |||
| - | 4. Consultation profil | ||
| - | |||
| - | 5. Modification profil | ||
| - | |||
| - | 6. Vérification rôle | ||
| - | |||
| - | 7. Déconnexion | ||
| - | </ | ||
| - | |||
| - | Tous les flux doivent être démontrables depuis Swagger et le Frontend. | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ====== Sprint suivant ====== | ||
| - | |||
| - | ===== Sprint 2 — Gestion Utilisateurs ===== | ||
| - | |||
| - | Objectifs : | ||
| - | |||
| - | * Documents utilisateurs | ||
| - | * Adresses | ||
| - | * Vérification identité | ||
| - | * Préférences utilisateur | ||
| - | * Notifications utilisateur | ||
| - | * Historique de connexion | ||
| - | * Gestion des sessions | ||
| - | |||
| - | Ce sprint finalise le domaine Utilisateurs avant de commencer le domaine principal : | ||
| - | |||
| - | ===== Sprint 3 ===== | ||
| - | |||
| - | Catalogue Immobilier | ||
| - | |||
| - | * Création Bien | ||
| - | * Modification Bien | ||
| - | * Photos | ||
| - | * Équipements | ||
| - | * Disponibilités | ||
| - | * Publication | ||
ujusum/2-implantation/2-authentification.1781961838.txt.gz · Dernière modification : 2026/06/20 15:23 de 88.174.75.218