Règles de sécurité Firestore
Les règles Firestore sont la seule chose qui protège vos données CMS. Sans elles, n'importe qui sur internet pourrait lire et modifier vos posts, vos réglages, voire créer des enregistrements
Les règles Firestore sont la seule chose qui protège vos données CMS. Sans elles, n'importe qui sur internet pourrait lire et modifier vos posts, vos réglages, voire créer des enregistrements utilisateur et s'attribuer le rôle admin. La config Firebase (apiKey, projectId, etc.) est publique par conception — la sécurité vient des règles + de la liste d'auth domains autorisés, pas du secret de la config.
Cette page vous donne le jeu de règles recommandé et explique ce qu'il fait. Si vous installez en mode SQLite, sautez cette page — les contrôles d'accès SQLite sont côté serveur Flexweg.
Les règles recommandées
Ouvrez Console Firebase → Firestore Database → Rules et collez ceci, en remplaçant [email protected] par l'email que vous avez défini comme utilisateur admin bootstrap (celui créé dans configuration projet Firebase) :
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// ─── Helpers ──────────────────────────────────────────────────────────
// Admin bootstrap : email épinglé ici. Source de vérité unique.
function bootstrapAdminEmail() {
return "[email protected]";
}
function isSignedIn() {
return request.auth != null;
}
// Admin bootstrap : connecté et email correspondant à l'adresse épinglée.
function isBootstrapAdmin() {
return isSignedIn()
&& request.auth.token.email != null
&& request.auth.token.email.lower() == bootstrapAdminEmail();
}
...
}
}
Le jeu de règles complet vit dans le README du dépôt — copiez-le tel quel et remplacez juste l'email.
Ce que font les règles
Modèle à trois niveaux
- Admin bootstrap : un utilisateur unique épinglé par email. Peut tout faire — créer d'autres utilisateurs, écrire la config Flexweg, modifier les posts d'autres auteurs. Source de vérité pour les autres permissions admin.
- Admins additionnels : tout utilisateur dont
users/{uid}.role === "admin"peut faire la même chose. Le bootstrap admin peut promouvoir d'autres comptes au rôle admin. - Éditeurs :
users/{uid}.role === "editor"peut éditer ses propres posts, lire la liste des autres utilisateurs, mais pas modifier la config ou supprimer les comptes des autres.
email_verified == true requis
Le bootstrap admin doit avoir un email vérifié par Firebase. Cela évite qu'un attaquant ayant deviné un mot de passe puisse passer les règles avec un token non vérifié.
Le formulaire d'installation déclenche un sendEmailVerification automatiquement si l'email n'est pas vérifié, et vous demande de cliquer sur le lien reçu avant de continuer.
Pas de règles « anyone can read »
Toutes les règles exigent au minimum isSignedIn(). Aucune collection Firestore n'est lisible sans authentification — ni les posts, ni les utilisateurs, ni les réglages. Le contenu public est sur Flexweg (HTML statique), pas dans Firestore.
Comment déboguer si les règles bloquent
Si vous voyez PERMISSION_DENIED après l'installation :
- L'email de l'admin bootstrap est-il bien épinglé dans les règles ? Vérifiez le
bootstrapAdminEmail(). - L'email est-il vérifié ? Ouvrez Firebase Console → Authentication → Users — la colonne
Email verifieddoit être verte. Sinon, redéclenchez la vérification depuis l'admin (le formulaire d'installation le fait automatiquement). - Le token JWT est-il à jour ? Déconnectez-vous + reconnectez-vous dans l'admin — le token mis en cache peut être stale.
- La règle est-elle bien déployée ? Vérifiez le timestamp de la dernière publication dans Firestore → Rules.
Étape suivante
Une fois les règles déployées et le bootstrap admin créé + vérifié, passez à la configuration Flexweg pour récupérer votre clé API.