web-dev-qa-db-fra.com

Règles dans Cloud Firestore - Comment vérifier si une clé est nulle

Dans Cloud Firestore Rules - J'ai un document appelé task et je veux voir si certaines données (champ assignee) sont nulles ou inexistantes.

J'ai essayé:

  1. resource.data.assignee == null - Ne fonctionne pas (erreur)
  2. !resource.data.hasAll(['assignee']) - Ne fonctionne pas (erreur)

La documentation indique que cela crée effectivement une erreur: // Error, key doesn't exist allow read: if resource.data.nonExistentKey == 'value';

7
Gal Bracha

En lisant les comparaisons de liste de la documentation relative aux règles de sécurité Firestore here , nous pouvons voir que hasAll renvoie true si toutes les valeurs sont présentes dans la liste.

// Allow read if one list has all items in the other list
allow read: if ['username', 'age'].hasAll(['username', 'age']);

Le request.resource.data est une carte contenant les champs et les valeurs. Pour utiliser hasAll, nous devons d’abord obtenir les clés sous forme de liste de valeurs comme indiqué here .

!resource.data.keys().hasAll(['assignee'])
15
Callam

En regardant les documents - https://firebase.google.com/docs/reference/rules/rules.Map

k in x  - Check if key k exists in map x

cela devrait donc fonctionner (sans les clés ())

!('asignee' in resource.data) 
2
pdkn