0.0.1-alpha.2
This commit is contained in:
261
docs/studies/001-AUTH_ADMIN_CORPUS_STUDY.md
Normal file
261
docs/studies/001-AUTH_ADMIN_CORPUS_STUDY.md
Normal file
@@ -0,0 +1,261 @@
|
||||
<!-- file: docs/studies/001-AUTH_ADMIN_CORPUS_STUDY.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Étude auth/admin — corpus historiques Actix
|
||||
|
||||
## Objet
|
||||
|
||||
Cette étude utilise deux projets historiques **inachevés** comme corpus d'inspiration pour SaseDev Knowledge. Ils ne sont ni des baselines autoritaires ni des dépendances à importer.
|
||||
|
||||
```text
|
||||
actix-auth-app-master.zip
|
||||
SHA-256 bcdf4c568c827b77c70ee476218c2b07ea0fca408ab87d2f044333309d19ab71
|
||||
|
||||
amahil-project-master.zip
|
||||
SHA-256 b6a3d83c3c2911a7ff36eeb20e353801fefddaf1e5eb7afec1ff12c67067a359
|
||||
```
|
||||
|
||||
L'objectif est de distinguer :
|
||||
|
||||
- les fonctionnalités réellement câblées ;
|
||||
- les structures préparatoires sans workflow complet ;
|
||||
- les intentions annoncées mais non implémentées ;
|
||||
- les concepts réutilisables pour Knowledge ;
|
||||
- les détails qui doivent rester différés.
|
||||
|
||||
## `actix-auth-app` — fonctionnalités effectivement câblées
|
||||
|
||||
Le projet expose réellement une base d'authentification Actix Web avec pages et API.
|
||||
|
||||
### Routes front observées
|
||||
|
||||
```text
|
||||
/
|
||||
/setlang
|
||||
/signup
|
||||
/confirm-signup
|
||||
/resend-confirmation-signup
|
||||
/lostpassword
|
||||
/login
|
||||
/newpassword
|
||||
/lostid
|
||||
/profile
|
||||
/logout
|
||||
```
|
||||
|
||||
Les pages invitées sont protégées par un middleware `guest_only`; le profil et la déconnexion par `auth_only`.
|
||||
|
||||
### API observée
|
||||
|
||||
```text
|
||||
GET /api/health
|
||||
GET /api/captcha
|
||||
POST /api/auth/login
|
||||
POST /api/auth/logout
|
||||
POST /api/auth/signup
|
||||
POST /api/auth/confirm-signup
|
||||
POST /api/auth/resend-confirmation-signup
|
||||
POST /api/auth/lostpassword
|
||||
POST /api/auth/newpassword
|
||||
POST /api/auth/lostid
|
||||
POST /api/auth/refresh
|
||||
GET /api/profile
|
||||
POST /api/profile/update
|
||||
POST /api/profile/change-password
|
||||
POST /api/profile/change-email
|
||||
POST /api/profile/change-avatar
|
||||
```
|
||||
|
||||
Le code observé matérialise notamment :
|
||||
|
||||
- hash/vérification de mot de passe avec Argon2 ;
|
||||
- access token et refresh token ;
|
||||
- sessions persistées avec informations de device/user-agent/IP ;
|
||||
- cookies `HttpOnly`, `SameSite=Lax` et `Secure` conditionnel au mode HTTPS pour les tokens ;
|
||||
- confirmation d'inscription ;
|
||||
- récupération d'identifiant et réinitialisation de mot de passe ;
|
||||
- CAPTCHA pour plusieurs parcours sensibles ;
|
||||
- rate limiting configurable sur certains parcours de récupération/confirmation ;
|
||||
- profil utilisateur, changement de mot de passe/email et avatar ;
|
||||
- statuts utilisateur et compteur d'échecs de connexion ;
|
||||
- middleware `admin_only`, `auth_only`, `guest_only` ;
|
||||
- stockage PostgreSQL et queries structurées ;
|
||||
- traduction Fluent, rendu Maud et frontend TypeScript/Vite/Sass.
|
||||
|
||||
Ces éléments sont des **capacités observées**, pas des exigences Knowledge.
|
||||
|
||||
## `actix-auth-app` — structures préparatoires ou incomplètes
|
||||
|
||||
Le README annonce un kernel OAuth2/OIDC complet, et le schéma/les DTOs/queries couvrent notamment :
|
||||
|
||||
```text
|
||||
OAuth clients
|
||||
OAuth authorization codes
|
||||
OAuth refresh/access tokens
|
||||
OAuth consents
|
||||
OAuth provider configs
|
||||
external user auth providers
|
||||
user 2FA recovery codes
|
||||
user events
|
||||
```
|
||||
|
||||
Des types existent également pour OAuth/OIDC, MFA/TOTP et plusieurs niveaux d'authentification de session.
|
||||
|
||||
Cependant, aucune route HTTP OAuth/OIDC n'est configurée dans les handlers observés et aucun flow MFA/TOTP complet n'est câblé. La dépendance OTP est même commentée dans le manifest. Ces capacités sont donc classées **préparatoires / annoncées**, pas implémentées de bout en bout.
|
||||
|
||||
Le middleware `admin_only` existe, mais aucune surface d'administration n'est configurée dans les handlers du projet observé.
|
||||
|
||||
Un autre détail interdit la copie mécanique : le modèle courant possède `User`, `Admin`, `Superadmin`, mais `admin_only` compare directement le rôle à `Admin`. Le comportement de `Superadmin` n'est donc pas une base suffisamment sûre pour définir le modèle Knowledge.
|
||||
|
||||
## `amahil-project` — fonctionnalités effectivement câblées
|
||||
|
||||
Amahil contient une base auth très proche sur les parcours classiques : login/logout, inscription, confirmation, récupération, refresh, profil, CAPTCHA, sessions et PostgreSQL.
|
||||
|
||||
Il ajoute surtout un début d'administration applicative :
|
||||
|
||||
```text
|
||||
scope /adminapi
|
||||
middleware admin_only
|
||||
GET /adminapi/user/list
|
||||
```
|
||||
|
||||
La liste d'utilisateurs est donc une fonctionnalité admin backend réellement branchée derrière une vérification de rôle.
|
||||
|
||||
Le schéma contient plusieurs niveaux de rôles :
|
||||
|
||||
```text
|
||||
global
|
||||
company
|
||||
project
|
||||
task
|
||||
```
|
||||
|
||||
Cette séparation montre qu'une identité partagée peut coexister avec des autorisations plus locales au domaine.
|
||||
|
||||
## `amahil-project` — interface admin incomplète
|
||||
|
||||
Le gabarit Maud d'administration référence notamment :
|
||||
|
||||
```text
|
||||
/admin
|
||||
/admin/users
|
||||
/admin/users/add
|
||||
```
|
||||
|
||||
avec sidebar et gestion des utilisateurs.
|
||||
|
||||
Ces routes frontend ne sont toutefois pas configurées dans le handler `front.rs` observé. Le module admin API contient en outre des opérations add/edit/delete seulement commentées.
|
||||
|
||||
Le corpus montre donc l'intention et une partie de l'UI, mais pas une console d'administration complète.
|
||||
|
||||
## Enseignements retenus pour Knowledge
|
||||
|
||||
### 1. Identité partagée, autorisation distribuée
|
||||
|
||||
Le PostgreSQL partagé peut porter les identités, sessions et métadonnées d'autorisation communes aux trois applications.
|
||||
|
||||
En revanche, chaque application Knowledge garde la responsabilité de vérifier côté serveur les opérations privilégiées de son propre domaine :
|
||||
|
||||
```text
|
||||
knowledge-pgr-server
|
||||
knowledge-howtos-server
|
||||
knowledge-snippets-server
|
||||
```
|
||||
|
||||
Une éventuelle application admin transversale est une façade supplémentaire, pas un bypass des autorisations locales.
|
||||
|
||||
### 2. Les URL restent ouvertes
|
||||
|
||||
Les chemins historiques :
|
||||
|
||||
```text
|
||||
/login
|
||||
/admin
|
||||
/adminapi
|
||||
/profile
|
||||
```
|
||||
|
||||
sont des exemples observés, pas un contrat Knowledge. Le routage exact sera décidé avec la première composition Web/auth réelle.
|
||||
|
||||
### 3. Le modèle de rôles reste ouvert
|
||||
|
||||
Les deux archives utilisent des modèles différents : rôle unique enum, tableaux de rôles, niveaux global/company/project/task.
|
||||
|
||||
Knowledge ne copie donc aucun enum historique. Le futur modèle devra distinguer au minimum :
|
||||
|
||||
```text
|
||||
identity
|
||||
session/authentication state
|
||||
platform-level capability when justified
|
||||
application/domain capability
|
||||
authorized action
|
||||
```
|
||||
|
||||
La granularité concrète reste `DEFER`.
|
||||
|
||||
### 4. Auth commune réutilisable, middleware Web séparé si nécessaire
|
||||
|
||||
Les parcours compte/session sont naturellement candidats à une implémentation partagée entre les trois applications. Une future crate commune n'est créée que lorsqu'un ownership réel et un premier cas d'usage existent.
|
||||
|
||||
Le code Actix spécifique peut rester distinct du domaine d'identité si cette séparation évite de coupler les contrats réutilisables au framework.
|
||||
|
||||
Aucun nom de crate auth n'est figé par cette étude.
|
||||
|
||||
### 5. OAuth/OIDC et MFA restent hors scope
|
||||
|
||||
Les structures de `actix-auth-app` montrent qu'OAuth2/OIDC, fournisseurs externes, consentements, MFA et recovery codes pourront être étudiés plus tard.
|
||||
|
||||
Ils ne deviennent pas des exigences de `0.0.1` parce que le corpus contient des tables ou des dépendances associées.
|
||||
|
||||
### 6. La sécurité n'est pas héritée par copie
|
||||
|
||||
Les archives apportent des idées utiles : Argon2, refresh token, sessions persistées, cookies protégés, rate limits, CAPTCHA et événements/audit.
|
||||
|
||||
Elles ne prouvent pas pour autant un modèle de sécurité complet pour Knowledge. En particulier, cette étude n'a pas établi dans les corpus un contrat CSRF complet, un modèle de capabilities final, ni une administration bout en bout.
|
||||
|
||||
Les propriétés de sécurité Knowledge devront être spécifiées puis testées dans leur propre scope.
|
||||
|
||||
## Capacités candidates pour les futures surfaces admin
|
||||
|
||||
Les éléments suivants combinent ce que les corpus montrent et les besoins déjà cadrés de Knowledge. Ils constituent un backlog conceptuel, pas le scope de `alpha.2`.
|
||||
|
||||
### Commun/transversal
|
||||
|
||||
- gestion des utilisateurs et de leur état ;
|
||||
- sessions actives et révocation ;
|
||||
- audit/événements utilisateurs ;
|
||||
- statut des sources Git et dernière synchronisation ;
|
||||
- jobs de synchronisation/indexation/publication ;
|
||||
- propositions, revues et conflits ;
|
||||
- configuration des sources publiques/privées ;
|
||||
- santé de PostgreSQL et projections reconstructibles.
|
||||
|
||||
### PGR
|
||||
|
||||
- état stable/dev et révision/tag source ;
|
||||
- propositions de changement normatif ;
|
||||
- validation/publication compatible avec la gouvernance PGR.
|
||||
|
||||
### HOWTOs
|
||||
|
||||
- création/révision/publication de procédures ;
|
||||
- classification, relations et validation du contenu procédural.
|
||||
|
||||
### snippets
|
||||
|
||||
- création/révision/publication de snippets ;
|
||||
- contexte, langage/technologie, classification et modération.
|
||||
|
||||
Les trois groupes spécifiques ci-dessus sont des **déductions Knowledge**, pas des fonctionnalités directement présentes dans les deux archives historiques.
|
||||
|
||||
## Décision de tranche
|
||||
|
||||
`alpha.2` ne crée :
|
||||
|
||||
- aucune route `/admin` ou `/login` ;
|
||||
- aucune crate auth/admin ;
|
||||
- aucun schéma PostgreSQL auth ;
|
||||
- aucun OAuth/OIDC/MFA ;
|
||||
- aucun rôle/capability définitif.
|
||||
|
||||
La tranche conserve seulement les invariants architecturaux nécessaires avant matérialisation des serveurs et documente le corpus pour éviter de devoir le réinterpréter depuis la conversation.
|
||||
Reference in New Issue
Block a user