在Cloud Firestore规则中 - 如何检查密钥是否为空

时间:2017-10-08 11:44:57

标签: firebase firebase-security google-cloud-firestore

Cloud Firestore规则中 - 我有一个名为task的文档,我想查看某些数据(assignee字段)是否为空/不存在

我试过了:

  1. resource.data.assignee == null - 不起作用(错误)
  2. !resource.data.hasAll(['assignee']) - 不起作用(错误)
  3. 从文档中 - 它表明这确实会产生错误: // Error, key doesn't exist allow read: if resource.data.nonExistentKey == 'value';

3 个答案:

答案 0 :(得分:18)

阅读Firestore安全规则文档here的列表比较,我们可以看到hasAll如果列表中存在所有值,则返回true。

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

request.resource.data是包含字段和值的地图。要使用hasAll,我们必须首先将密钥作为值列表here获取。

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

答案 1 :(得分:2)

查看文档-https://firebase.google.com/docs/reference/rules/rules.Map

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

所以这应该工作(没有keys())

!('asignee' in resource.data) 

答案 2 :(得分:0)

如果要确保键为空,则需要检查该键是否不是资源键属性的一部分:
!resource.data.keys().hasAny(['assignee'])

您还可以使用hasAllhasOnly。更多信息here