在 Cloud Firestore 规则中 - 如何检查密钥是否为空
In Cloud Firestore rules - How do I check if a key is null
在 Cloud Firestore Rules 中 - 我有一个名为 task
的文档,我想查看某些数据(assignee
字段)是否为 null / don '不存在。
我试过:
resource.data.assignee == null
- 不起作用(错误)
!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'])
您也可以使用 hasAll
或 hasOnly
。更多信息 here
在 Cloud Firestore Rules 中 - 我有一个名为 task
的文档,我想查看某些数据(assignee
字段)是否为 null / don '不存在。
我试过:
resource.data.assignee == null
- 不起作用(错误)!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'])
您也可以使用 hasAll
或 hasOnly
。更多信息 here