Schéma de base de données¶
La couche métier est modélisée avec Prisma sur PostgreSQL. Les artefacts OIDC transitoires (codes, tokens, sessions SSO) vivent dans Redis, pas en base.
Diagramme entités-relations¶
erDiagram
User ||--o{ UserRole : "possède"
Role ||--o{ UserRole : "attribué à"
User ||--o{ AppAccess : "accède à"
OidcClient ||--o{ AppAccess : "autorise"
User ||--o{ Invitation : "invité"
User ||--o{ PasswordResetToken : "reset"
User ||--o{ Session : "sessions portail"
User ||--o{ AuditLog : "acteur"
Entités¶
| Entité | Rôle | Points clés |
|---|---|---|
| User | Comptes | statut INVITED/ACTIVE/DISABLED, mfaEnabled, mfaSecretEnc (chiffré), passwordHash (Argon2id, null avant activation). |
| Role | Rôles | flags isAdmin, isSuperAdmin, et mfaRequired (anticipe un MFA obligatoire par rôle sans migration). |
| UserRole | Jonction | rôles multiples par utilisateur. |
| OidcClient | Applications SSO | clientSecretEnc (chiffré, jamais réaffiché), redirectUris, allowedScopes, secretRotatedAt. |
| AppAccess | Jonction | pilote le tableau de bord et les claims apps. |
| Invitation | Invitations | tokenHash (hash SHA-256), expiresAt, usedAt (usage unique). |
| PasswordResetToken | Réinit. mot de passe | même principe (hash, expiration, usage unique). |
| Session | Sessions portail | tokenHash, expiresAt, revokedAt — visibilité admin + révocation. |
| AuditLog | Audit | append-only : action, acteur, cible, metadata, IP. |
| Setting | Configuration | clés éditables en admin (durées de vie des tokens, rate limiting). |
Sécurité des données¶
- Aucun secret n'est stocké en clair : mots de passe hachés (Argon2id), tokens d'invitation/reset/session hachés (SHA-256), secrets clients et TOTP chiffrés (AES-256-GCM).
- Identifiants en UUID, index sur les clés d'accès fréquentes → montée en charge sans refonte.
Le schéma Prisma complet est disponible dans
apps/backend/prisma/schema.prisma.