Skip to content

Admin : socle Next.js, coque, connexion, rôles et journal (A-01) #52

Open

Description

@IlanAMG

Contexte

Epic : #5
Admin-Web › Principes · Rôles · Modèles communs · A-01 · écrans de référence : #339
Décision : D-085 (cadrage du 2026-10-09)
Maquette : Ecrans › Admin web · validée le 2026-10-09 (#339, D-086)

Comportement attendu

  • apps/admin : Next.js (App Router), Tailwind, shadcn/ui thémé depuis tokens.json, client packages/api-client, rendu des données côté client uniquement ; Cloud Run europe-west9, noindex, no-store.
  • Connexion Google et e-mail (Firebase Auth) ; accès refusé sans rôle editor, moderator ou admin, ou si suspendu ; retour à la page demandée.
  • Coque : navigation par rôle (matrice de la spec) avec compteurs « à traiter », en-tête, compte.
  • Composants communs : tableau paginé par curseur avec filtres dans l'adresse, panneau de détail, confirmation avec motif, toasts, états vide, chargement, erreur.
  • API : garde de rôle sur /admin/*, table admin_actions (auteur, action, cible, avant, après, motif) écrite par toute action d'écriture admin.
  • Commencer sans attendre la planche Design — admin web : coque, file de modération et tableau de bord (écrans de référence) #339 ; reprendre l'habillage une fois validée.

Critères d'acceptation

  • Un compte user est refusé avec message clair
  • Un editor ne voit que ses sections, et l'API lui refuse les autres (403)
  • Une action d'écriture laisse une ligne dans admin_actions

Ajouts du 2026-10-09 (D-086, D-087)

  • Maquette : Ecrans › Admin web · écrans de référence validés le 2026-10-09 (Design — admin web : coque, file de modération et tableau de bord (écrans de référence) #339, D-086) · canevas Widoo — Admin : coque, A-01 et ses refus, thème shadcn (variables depuis tokens.json), modèles (tableau, panneau de détail, confirmation avec motif, toasts), menu réduit aux icônes de 1 024 à 1 279 px.
  • Double authentification obligatoire : TOTP via Firebase Authentication avec Identity Platform, activée à la première connexion ; l'API refuse /admin/* sans second facteur (403 mfa_required) ; session de 12 h au plus ; nouvelle vérification si la dernière date de plus de 10 min avant une action sensible (Admin-Web › Principes).
  • Compteurs de navigation : GET /admin/counters, filtrés par rôle, rouges au-delà de 72 h.
  • Un compte sans second facteur est conduit à l'activer avant d'entrer

Ajout du 2026-10-09 (décision d'Ilan)

  • L'admin reste une app séparée du site (apps/admin, service Cloud Run et sous-domaine admin.widooapp.com à part) : pas de /admin sur le site, pour cloisonner la session et les règles de cache.
  • Créer packages/ui : thème shadcn tiré de tokens.json et composants communs, utilisés par apps/admin et, au fil des évolutions, par apps/web.

Activity

  1. added this to the v0.6 milestone on Sep 21, 2026
  2. removed
    needs-designQuestion ou maquette à produire en mode DESIGN
    on Sep 28, 2026
  3. IlanAMG commented on Sep 28, 2026

    @IlanAMG
    MemberAuthor

    Plus de planche de design (#78 fermé, décision d'Ilan du 2026-09-28) : spécification détaillée à venir dans le wiki (section Admin web d'Ecrans), à faire par le chef de projet avant le début de v0.6 ; composants d'une bibliothèque standard.

  4. changed the title [-]Créer l'app admin : socle React/Vite et connexion (A-01)[/-] [+]Admin : socle Next.js, coque, connexion, rôles et journal (A-01)[/+] on Oct 9, 2026
  5. Nascimento95 commented on Oct 12, 2026

    @Nascimento95
    Collaborator

    🔨 Démarrage — plan :

    1. packages/shared : sections de l'admin et matrice des rôles (une seule source pour l'API et le menu).
    2. packages/ui : thème shadcn tiré de tokens.json et composants communs.
    3. apps/admin : socle Next.js (mêmes choix que le site, repris de la branche issue/233-web-foundation, pas encore fusionnée), en-têtes noindex et no-store, coque avec navigation par rôle, A-01.
    4. API : garde de rôle par section, refus mfa_required et compte suspendu, table admin_actions, GET /admin/counters.

    Deux points en attente d'Ilan ou Paul, sans bloquer le début :

    • je n'ai pas d'accès au projet Firebase de Widoo : la connexion réelle (Google, lien par e-mail) se branchera quand j'aurai la configuration web du projet de staging ;
    • la double authentification TOTP demande Identity Platform activé sur le projet.

    La migration admin_actions sera dans la PR ; son application en staging reste à Ilan ou Paul.

  6. Nascimento95 commented on Oct 12, 2026

    @Nascimento95
    Collaborator

    ⛔ Bloqué pour le dernier critère (« un compte sans second facteur est conduit à l'activer ») : l'écran d'activation et de saisie du code TOTP ne peut ni se tester ni se valider sans le vrai projet Firebase. L'émulateur Firebase Auth ne gère pas le TOTP.

    Il faut, d'Ilan ou de Paul :

    1. un accès de Marco au projet Firebase de staging (aucune invitation reçue sur son adresse) et la configuration web du projet (apiKey, authDomain, projectId) ;
    2. Identity Platform activé sur ce projet, avec le second facteur TOTP ;
    3. les fournisseurs Google et lien par e-mail activés, et admin (staging) dans les domaines autorisés ;
    4. l'application de la migration 0003_add_admin_actions en staging.

    Ces écrans n'ont pas de planche : A-01 ne montre ni l'activation ni la saisie du code. Je suivrai le modèle de la carte de connexion, sauf avis contraire.

    Le reste du ticket est dans la PR en brouillon #363 (niveau 2) : trois critères sur quatre tenus. L'API refuse déjà /admin/* sans second facteur hors émulateur, donc rien n'est ouvert par erreur.

  7. Nascimento95 commented on Oct 13, 2026

    @Nascimento95
    Collaborator

    Réglages faits par Marco sur le projet Firebase widoo-staging, le 2026-10-13 (depuis la console Firebase et Cloud Shell, avec le compte invité par Ilan) :

    • Connexion Google activée, nom public du projet « Widoo ». L'adresse d'assistance est l'adresse personnelle de Marco, la seule proposée par la console : à remplacer par celle d'Ilan (Authentication › Méthode de connexion › Google).
    • Lien envoyé par e-mail (connexion sans mot de passe) activé.
    • Identity Platform : projet mis à niveau, comme prévu par D-087. Irréversible ; gratuit jusqu'à 50 000 utilisateurs actifs par mois (tarifs lus dans la console au moment de la mise à niveau).
    • Second facteur TOTP activé par l'API d'administration (mfa.providerConfigs, adjacentIntervals: 1) : il ne s'active ni dans la console Firebase ni dans la console Google Cloud. Réversible par la même commande avec DISABLED. Le multifacteur par SMS reste désactivé.
    • localhost figure dans les domaines autorisés ; le domaine de l'admin de staging reste à y ajouter quand il existera.

    Le blocage du 2026-10-12 est donc levé pour staging : l'écran d'activation et de saisie du code TOTP peut être codé et testé contre le vrai projet.

    Restent à faire par Ilan ou Paul : les mêmes réglages sur le projet de production le moment venu ; un modèle d'e-mail en français (defaultLocale est en) ; l'application de la migration 0003_add_admin_actions en staging.

  8. Nascimento95 commented on Oct 13, 2026

    @Nascimento95
    Collaborator

    Écran de double authentification ajouté à la PR #363 (commits 0acb39d et 0474cf9), qui sort du brouillon.

    Vérifié par Marco le 2026-10-13, dans Chrome, admin et API en local sur le commit 0474cf9, branchés sur le projet Firebase widoo-staging (base de données locale) :

    • Un compte user est refusé avec message clair — connexion Google réelle, « Ce compte n'a pas accès à l'admin. » avec l'adresse.
    • Un compte sans second facteur est conduit à l'activer avant d'entrer — écran d'activation, QR code scanné dans une application d'authentification, code saisi, entrée dans l'admin ; à la connexion suivante, le code est demandé, un mauvais code est refusé.

    Les deux autres critères sont couverts par les tests de l'API et le test en local du 2026-10-12 (menu de l'éditeur, 403 sur les sections refusées, ligne dans admin_actions).

    Non vérifié contre le vrai projet : le lien de connexion par e-mail et la saisie de la clé à la main. La CI de la PR attend toujours la fusion de #364.

  9. Nascimento95 commented on Oct 13, 2026

    @Nascimento95
    Collaborator

    Complément de vérification par Marco, le 2026-10-13, même montage (admin et API en local sur 0474cf9, Firebase widoo-staging, base locale), avec un second compte :

    • compte neuf refusé à la première connexion (« Ce compte n'a pas accès à l'admin. » avec l'adresse) ;
    • passé moderator dans la base locale : activation de la double authentification avec son propre QR code, puis entrée dans l'admin ;
    • le menu est celui du modérateur (À traiter, Catalogue sans Brouillons IA, Communauté ; ni Revenus ni Administration), avec le compteur de modération ; l'en-tête affiche l'adresse du compte, qui n'a pas de prénom, et « Modérateur ».

    Le mail du lien de connexion a bien été reçu sur une boîte Hotmail, dans le courrier indésirable (signalé dans l'Inbox : #4 (comment)).

  10. IlanAMG commented on Oct 16, 2026

    @IlanAMG
    MemberAuthor

    Chef de projet (16/10/2026) : glissé du Sprint 0 au Sprint 1, non terminé.

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