1

J'ai lu la documentation de Firebase sur la sécurité et les règles de lecture/écriture/validation. La documentation est assez détaillée, mais je ne trouve aucune information sur l'impact des règles de sécurité sur les performances (interrogation, récupération, écriture de données, etc.).Quel est l'impact sur les performances des règles de lecture/écriture/validation de Firebase?

Par exemple, considérons l'exemple de base de données ci-dessous:

myapp : { 
    projects : { 
     <project_id> : { ... } 
    } 
    users : { 
     <uid> : { role : <admin or pm or other> } 
    } 
} 

.. et les règles de base de données ci-dessous pour la lecture:

rules : { 
    projects : { 
     $project : { 
      { 
       .read: root.child(‘users’).child(auth.uid) && root.child(‘users’).child(auth.uid).child(‘role’).val() == “admin” || root.child(‘users’).child(auth.uid).child(‘role’).val() == “pm” 
        } 
       } 
      } 

En ce qui concerne la lecture des données de tout nœud de projet $ (ex : .child ("projects/alpha) .once()), quel impact aura cette règle sur les performances par rapport à si aucune règle de lecture n'existe? Si je fais plusieurs requêtes/lectures, l'une après l'autre, la règle sera évaluée chaque Firebase 'enregistre-t-il le résultat de la règle quelque part pour éviter une réévaluation?

Répondre

1

Les règles de lecture et d'écriture de Firebase sont évaluées à l'emplacement où vous écrivez des données ou à l'endroit où vous joignez un écouteur. Dans l'exemple que vous avez partagé, vous avez le droit de lecture sur tous les noms de projets ou vous n'avez pas l'autorisation (depuis rules cannot be used to filter data). Il n'est donc pas nécessaire d'évaluer la règle pour chaque opération de lecture, mais uniquement lorsque vous attachez le programme d'écoute (ou lorsque l'état d'authentification change). Compte tenu de la nature déclarative des règles de sécurité Firebase, je doute que les réponses à ces questions affectent les règles que vous écrivez. Ils ont été spécifiquement conçus pour être déclaratifs pour cette raison: l'implémentation côté serveur peut changer, sans changer le langage des règles.

Vous devriez écrire des règles qui spécifient ce que que vous voulez et puis le laisser au serveur de base de données Firebase décider comment de les exécuter efficacement. Si jamais vous rencontrez un cas où vous pensez que vos règles font une lecture ou une écriture lente, j'aimerais voir que dans une question.

+0

Salut Frank, merci pour la réponse rapide. En guise de suivi, quel effet a une règle par rapport à ne pas avoir de règle sur la performance? Est-ce essentiellement négligeable? (J'ai apporté quelques modifications à la question pour être plus clair). –

+1

Sauf si vous rencontrez un problème de performance que vous pensez être causé par des règles spécifiques, je m'en tiens à écrire les règles qui correspondent à votre cas d'utilisation. Tout le reste est une optimisation prématurée. –