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ôles — admin 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 tableusersdu 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 écrireusers/{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 :
- 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).