Aller au contenu

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.