Files
office_translator/docs/GESTION-UTILISATEURS.md
Sepehr Ramezani 26bd096a06 feat: production deployment - full update with providers, admin, glossaries, pricing, tests
Major changes across backend, frontend, infrastructure:
- Provider system with model selection (Google, DeepL, OpenAI, Ollama, Google Cloud)
- Admin panel: user management, pricing, settings
- Glossary system with CSV import/export
- Subscription and tier quota management
- Security hardening (rate limiting, API key auth, path traversal fixes)
- Docker compose for dev, prod, and IONOS deployment
- Alembic migrations for new tables
- Frontend: dashboard, pricing page, landing page, i18n (en/fr)
- Test suite and verification scripts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-25 15:01:47 +02:00

2.8 KiB
Raw Blame History

Gestion des utilisateurs — référence technique

1. Deux emplacements possibles pour un compte

Emplacement Fichier / système Quand cest utilisé
Base SQLAlchemy Table users dans data/translate.db (SQLite par défaut) ou PostgreSQL Inscription et authentification lorsque le module base est chargé (services/auth_service.py).
Fichier JSON data/users.json Ancien mode « fichier seul », ou compte créé avant migration, ou utilisateur présent uniquement ici (legacy).

Lauthentification (get_user_by_email, etc.) lit dabord la base, puis repli sur users.json si lutilisateur ny est pas (services/auth_service.py).

2. Bug corrigé : liste admin vide alors quun compte existe

Cause : GET /api/v1/admin/users ne lisait que la table SQL users. Un compte présent uniquement dans data/users.json napparaissait jamais.

Correction : la route agrège :

  1. Tous les utilisateurs de la base (ordre created_at décroissant).
  2. Les entrées de users.json dont lid et le-mail (normalisé) ne sont pas déjà couverts par la base (évite les doublons).

Chaque ligne comporte un champ storage : database ou json_file.

3. Endpoints admin concernés

Méthode Chemin Rôle
GET /api/v1/admin/users Liste fusionnée (base + JSON-only).
PATCH /api/v1/admin/users/{user_id} Changement de plan (plan).
POST /api/v1/admin/users/{user_id}/password Corps JSON { "new_password": "..." } (min. 8 caractères). Définit le hash en base ou dans users.json selon où vit le compte.

Authentification : en-tête Authorization: Bearer <token admin> (pas le JWT utilisateur).

4. Réinitialisation du mot de passe (compte existant, mot de passe oublié)

  1. Se connecter à ladmin.
  2. Aller dans Utilisateurs.
  3. Repérer la ligne (colonne Stockage : Base ou JSON).
  4. Cliquer MDP, saisir le nouveau mot de passe deux fois, valider.

Il nexiste pas encore de flux « mot de passe oublié » par e-mail côté utilisateur final (pas denvoi SMTP dans ce flux).

5. Statistiques admin (GET /api/v1/admin/stats)

Le total dutilisateurs et la répartition par plan incluent désormais base + utilisateurs JSON-only, de façon cohérente avec la liste utilisateurs.

6. Fichiers de code principaux

  • routes/admin_routes.pyget_admin_users, admin_reset_user_password, get_admin_stats.
  • services/auth_service.pyadmin_set_user_password, load_users, get_user_by_email.
  • database/repositories.pyUserRepository.
  • frontend/src/app/admin/users/ — tableau, dialogue mot de passe, hooks.