Skip to content

Admin : utilisateurs et rôles (A-06) #341

Open

Description

@IlanAMG

Contexte

Epic : #5
Admin-Web › A-06
Décision : D-085 (cadrage du 2026-10-09)

Comportement attendu

  • UI : liste avec recherche (e-mail, prénom, identifiant), fiche, actions de la spec, réservées au rôle indiqué dans la matrice.
  • API : GET /admin/users, GET /admin/users/:id, PATCH /admin/users/:id/role, POST /admin/users/:id/suspend et /reactivate (motif), POST /admin/users/:id/gift (Premium jusqu'à une date ou un parcours, plan_source = gift), GET /admin/users/:id/export, DELETE /admin/users/:id (même règle que la suppression dans l'app) ; POST /admin/users/:id/certification existe déjà.
  • Compte suspendu : l'API répond 403 account_suspended à toute requête authentifiée ; profil public masqué, parcours publiés gardés.
  • Chaque action écrit dans admin_actions.

Critères d'acceptation

  • Un admin ne peut ni se suspendre, ni se supprimer, ni retirer son propre rôle
  • Un Premium offert donne l'accès aux parcours Premium jusqu'à sa date, puis s'arrête
  • Un moderator voit la fiche et peut suspendre, pas changer un rôle

Activity

  1. added this to the v0.6 milestone on Oct 9, 2026
  2. Nascimento95 commented on Oct 16, 2026

    @Nascimento95
    Collaborator

    🔨 Démarrage — branche issue/341-users-and-roles, empilée sur issue/54-reports-and-ratings (#479), main inchangée depuis le rebase du 16/10 (dernière migration 0014).

    Niveau de risque : 3 (changement de rôle, suspension, suppression de compte, Premium offert, migration) : level:3, revue OWASP complète, fusion sur demande de l'opérateur.

    Plan en commits autonomes

    1. Migration 0017 : users.plan_source et origine d'un déblocage de parcours (store ou gift), schémas partagés.
    2. API : liste (recherche, curseur) et fiche d'un utilisateur.
    3. API : changement de rôle, suspension et réactivation (journal), profil public masqué pour un compte suspendu.
    4. API : offrir Premium (date) ou un parcours.
    5. API : certification (la route n'existe pas encore malgré le wiki), export, suppression.
    6. Admin : liste et panneau de détail.
    7. Admin : rôle, suspension. 8. Admin : offrir, certification, export, suppression.

    Règles retenues avec l'opérateur : rôle, Premium offert, suppression, certification réservés à l'admin ; le moderator suspend seulement les comptes user et editor ; un admin ne touche pas à son propre compte ; offre Premium refusée sur un abonnement du store actif, et il faut exactement une date ou un parcours.

    Dépend de tables absentes : avis (#64) et signalements de lieux (#49) : écran construit, réponse vide à remplacer plus tard.

  3. Nascimento95 commented on Oct 16, 2026

    @Nascimento95
    Collaborator

    🔎 PR ouverte : #499 (niveau 3, label level:3, base issue/54-reports-and-ratings). La fusion attend la demande de l'opérateur.

    Vérification humaine : Marco a testé en local le 2026-10-16, sur la tête de la branche avant le découpage en commits (contenu identique à f93ed9e), dans l'admin connecté :

    • recherche et fiche d'un compte (Camille, Lina) ;
    • Premium offert jusqu'à une date, refus sur un abonnement du store actif, parcours offert ;
    • attribution du badge, changement de rôle, suspension et réactivation ;
    • fiche du suspendu (Hugo), moderator qui ne voit plus « Suspendre » sur un éditeur (Sarah) ;
    • panneau de droite qui défile sur une fiche longue, téléchargement de l'export, suppression d'un compte (il disparaît de la liste).

    Non testé : la fiche avec des avis ou signalements de lieux (tables absentes, #64 et #49), et la nouvelle saisie du TOTP (absente du socle).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions