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

In Cloud Firestore rules - How do I check if a key is null

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

我试过:

  1. resource.data.assignee == null - 不起作用(错误)
  2. !resource.data.hasAll(['assignee']) - 不起作用(错误)

根据文档 - 它指出这确实会产生错误: // Error, key doesn't exist allow read: if resource.data.nonExistentKey == 'value';

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

// 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'])

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

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

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

!('assignee' in resource.data) 

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

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