This commit is contained in:
2026-03-09 01:30:12 +01:00
parent 74f4effd49
commit 50e1d4c25f
32 changed files with 1499 additions and 79 deletions

View File

@@ -1,3 +1,35 @@
## Architecture & Philosophie
Ce projet s'inspire de la philosophie de Rust : **"Rendre les états illégaux impossibles à représenter"**.
Si vous venez de **Django**, voici les principales différences à garder en tête :
### 1. Extracteurs vs Objet Request
Contrairement à Django qui passe un objet `request` "fourre-tout" à chaque vue, ce projet utilise des **Extracteurs Axum
** (dans la signature des fonctions).
- **Le "Contrat" par la signature :** Si une vue demande `user: CurrentUser`, Axum garantit que l'utilisateur est
authentifié. Si ce n'est pas le cas, la vue n'est pas appelée et une erreur 401 est retournée automatiquement.
- **Auto-documentation :** En regardant simplement la signature d'une fonction, on sait exactement ce dont elle a
besoin (Base de données, Utilisateur, JSON, etc.).
### 2. Le Flux d'Authentification
1. **Middleware (`context_middleware`) :** Intercepte la requête, vérifie le JWT, récupère l'utilisateur complet en base
de données, et injecte le tout dans `RequestContext`.
2. **Extensions :** Le `RequestContext` est stocké dans les "extensions" de la requête (un espace de stockage de type
Map).
3. **Extracteurs :** L'extracteur `CurrentUser` récupère les données depuis les extensions et les rend disponibles dans
la signature de votre vue.
### 3. Transparence (Deref)
L'objet `CurrentUser` enveloppe le modèle de base de données. Grâce à l'implémentation de `Deref`, vous pouvez accéder
aux champs de l'utilisateur (ex: `user.is_superuser`) directement comme s'il s'agissait du modèle lui-même.
---
## TODO
Terminer le système d'authentification (login, changement de mot de passe...)