Utilisateurs et rôles

Flexweg CMS a deux rôles — et — plus une convention spéciale d'admin bootstrap pour le tout premier login. L'authentification est déléguée :

Flexweg CMS a deux rôlesadmin et editor — plus une convention spéciale d'admin bootstrap pour le tout premier login. L'authentification est déléguée :

  • Mode Firebase : Firebase Authentication (email/mot de passe). Les enregistrements utilisateur (nom d'affichage, rôle, préférences) vivent dans la collection Firestore users/{uid}.
  • Mode SQLite : API Auth SQLite (/api/v1/sqlite/auth/*). Email/mot de passe avec bcrypt côté serveur, sessions par tokens opaques 30 jours. Les enregistrements utilisateur vivent dans la table users du fichier SQLite.

Le code admin au-dessus du dispatcher est strictement identique dans les deux modes.

Rôles

admin

Accès complet :

  • Lecture + écriture de tous les posts, pages, termes, médias
  • Gestion des autres utilisateurs (création, changement de rôle, suppression)
  • Édition des réglages site (titre, thème, plugins, menus)
  • Installation / activation / désactivation / désinstallation des plugins et thèmes
  • Lecture / écriture du document / de la ligne config Flexweg (clé API Flexweg)

editor

Centré contenu :

  • Lecture + écriture de tous les posts, pages, termes, médias
  • Ne peut pas gérer les autres utilisateurs
  • Ne peut pas éditer les réglages site, installer des plugins, ou lire la clé API Flexweg

Le rôle est stocké dans users/{uid}.role. Les nouveaux utilisateurs sont créés avec role: "editor" par défaut.

L'admin bootstrap

Le premier utilisateur — celui dont l'email est épinglé dans les règles Firestore ou enregistré comme premier compte SQLite — est l'admin bootstrap. Il a tous les droits d'un admin standard, plus une convention spéciale :

  • Mode Firebase : les règles Firestore l'identifient par email (insensible à la casse, doit avoir email_verified == true). Le bootstrap admin peut écrire users/{n'importe quel uid} sans condition — ce qui lui permet de créer le tout premier enregistrement utilisateur (le sien), ce qu'un admin standard ne pourrait pas faire.
  • Mode SQLite : le serveur Flexweg pose role: "admin" automatiquement sur le premier compte enregistré via /auth/install. Ce statut est inscrit en base et ne nécessite pas d'épingler un email dans des règles externes.

Dans les deux modes, vous pouvez promouvoir d'autres utilisateurs au rôle admin une fois connecté. Aucune raison de garder le bootstrap admin comme seul admin — créez d'autres admins pour la résilience (perte d'accès au compte bootstrap).

Gérer les utilisateurs (admins seulement)

Utilisateurs dans la sidebar ouvre la liste avec :

  • Avatar, nom, email, rôle, dernière connexion
  • Filtres par rôle
  • Bouton Nouvel utilisateur

Créer un utilisateur

Cliquez sur Nouvel utilisateur. Le formulaire demande :

  • Email
  • Mot de passe (initial — l'utilisateur peut le changer)
  • Prénom, nom (optionnels — éditables par l'utilisateur ensuite)
  • Rôle (admin / editor)

Mode Firebase : crée un compte Firebase Auth (createUserWithEmailAndPassword) et un enregistrement Firestore associé. Note : ça vous déconnecte temporairement (Firebase signe automatiquement comme le nouvel utilisateur après création) — l'admin re-signe l'admin bootstrap automatiquement.

Mode SQLite : appelle POST /api/v1/sqlite/auth/users avec un token d'admin. Le serveur crée la ligne users côté SQLite. Aucune déconnexion.

Changer le rôle d'un utilisateur

Bouton Éditer sur la ligne → menu déroulant Rôle. Le changement est immédiat.

Supprimer un utilisateur

Bouton Supprimer sur la ligne. Demande confirmation. Conséquences :

  • L'enregistrement utilisateur est supprimé (Firestore ou SQLite)
  • Les posts dont cet utilisateur était auteur gardent l'ID dans Post.authorId — l'admin affiche "(utilisateur supprimé)" comme nom d'auteur
  • En mode Firebase : le compte Firebase Auth n'est PAS supprimé automatiquement. Faites-le manuellement dans Firebase Console → Authentication → Users si nécessaire.
  • En mode SQLite : le compte Auth est supprimé côté serveur en même temps.

Mot de passe oublié

Mode Firebase : lien « Mot de passe oublié » sur l'écran de connexion → envoie un email de reset via Firebase Auth.

Mode SQLite : pas d'email automatique. Un admin doit utiliser l'endpoint adminResetPassword côté serveur (ou la fonction équivalente dans l'admin si exposée).