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

  1. 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.
  2. 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.
  3. É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 :

  1. L'email de l'admin bootstrap est-il bien épinglé dans les règles ? Vérifiez le bootstrapAdminEmail().
  2. L'email est-il vérifié ? Ouvrez Firebase Console → Authentication → Users — la colonne Email verified doit être verte. Sinon, redéclenchez la vérification depuis l'admin (le formulaire d'installation le fait automatiquement).
  3. Le token JWT est-il à jour ? Déconnectez-vous + reconnectez-vous dans l'admin — le token mis en cache peut être stale.
  4. 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.