J'essaie de sécuriser ma base de données firebase pour permettre la création de nouveaux enregistrements, mais ne permet pas la suppression d'enregistrements existants. En fin de compte, je prévois également d'utiliser l'authentification Firebase dans mon application, et de permettre aux utilisateurs de mettre à jour les enregistrements existants s'ils en sont l'auteur, mais j'essaie de faire fonctionner le cas simple en premier.Les règles de base de données Firebase - `data.exists()` semble toujours être vrai, bug possible?
Cependant! Peu importe ce que j'essaie dans le simulateur de règles de base de données, malgré ce que la documentation seems to suggest, la valeur de data.exists()
semble toujours être vraie. D'après ce que je peux comprendre de the documentation, la variable data
représente un enregistrement dans la base de données comme avant une opération. C'est-à-dire, pour les créations, data
n'existerait pas, et pour les mises à jour/suppressions, data
ferait référence à un enregistrement réel qui existe dans la base de données. Cela ne semble pas être le cas, au point où je soupçonnais en fait un bogue dans Firebase, comme lors de la définition des règles suivantes sur ma base de données, toutes les opérations d'écriture ne sont pas autorisés:
{
"rules": {
".read": true,
".write": "!data.exists()"
}
}
Non Peu importe les valeurs que je mets dans le simulateur, que ce soit la localisation ou les données. J'ai même écrit une petite application EmberJS pour vérifier si le simulateur dit la vérité et lui aussi, est refusé l'autorisation pour toutes les opérations d'écriture.
Je n'ai vraiment aucune idée d'où aller à partir d'ici car je suis à peu près hors de choses à essayer. J'ai essayé de supprimer tous les enregistrements de ma base de données, ce qui permet au simulateur de penser qu'il peut effectuer des opérations d'écriture, mais mon application de test obtient toujours PERMISSION_DENIED, donc je ne sais pas ce qui cause des incohérences.
Est-ce que ma compréhension de la variable data
prédéfinie est correcte? Si oui, pourquoi ne puis-je pas écrire les règles que je veux? J'ai vu snippets essayant littéralement d'accomplir ma règle «créer seulement, non-supprimer» qui semblent aligner avec ma compréhension.
Dernière note: J'essaie cela dans un tout nouveau projet Firebase avec juste les règles ci-dessus, et seulement ~ quelques enregistrements de données indésirables juxtaposant ma base de données.
Salut merci pour la réponse. C'était le morceau manquant dans ma compréhension, je n'avais clairement pas analysé la documentation correctement. J'ai mis en œuvre des changements comme celui-ci et maintenant tout fonctionne à 100% comme prévu. Je supposais que 'data' était une sorte de variable résolue magiquement qui a été déduite en fonction de la demande que vous faites, et non basée sur les règles elles-mêmes. Merci! – Peabnuts123