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é:
resource.data.assignee == null
- Ne fonctionne pas (erreur)!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';
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'])
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)