在云Firestore规则中 - 如何检查密钥是否为空
In Cloud Firestore规则 - 我有一个文档,名为task
,我想查看某些数据(assignee
字段)是否为空/不存在。在云Firestore规则中 - 如何检查密钥是否为空
我已经试过:
-
resource.data.assignee == null
- 不工作(错误) -
!resource.data.hasAll(['assignee'])
- 不工作(错误)
从文档 - 它指出,这确实创建一个错误: // Error, key doesn't exist allow read: if resource.data.nonExistentKey == 'value';
阅读Firestore安全规则的列表比较如果所有值都存在于列表中,则可以看到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'])
应该'!('asignee'in resource.data.keys())'也工作吗?另外需要注意的是,从规则文档: “请求中没有提供的资源中的字段被添加到'request.resource.data'。规则可以通过比较'request'来测试字段是否被修改。 resource.data.foo'知道'resource.data.foo'知道'resource'中的每个字段也将出现在'request.resource'中,即使它没有在写请求中提交。“,所以可能有密钥存在的时间,你不期待它... – menehune23
以下是完整的规则文件 - https://github.com/Metaburn/doocrate/blob/master/firestore.rules 据我所知'resource'是一个文档,因为我使用'匹配/任务/ {anyTask} {' 从资源上的firebase文档 - https://firebase.google.com/docs/firestore/reference/security/#resource_1 –
我不需要检查文档 - 我知道文档在那儿。 我想检查该文档中的字段。 因此对于'/ tasks/my-task' - 'tasks'是集合。 'my-task'是文件。并且里面有一个字段'assignee' - 我想看看它是否为空,我不能 –
有一个'resource.data.keys()'函数,尝试使用'hasAll(['assignee'] )'而不是。 – Callam