【发布时间】:2020-06-19 23:45:41
【问题描述】:
我正在尝试编写一个只允许添加某种类型的值的安全规则。
这就是我现在拥有的:
allow update if
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.sessionID == key2
// THIS CHECKS IF THE USER IS ALLOWED TO UPDATE THIS DOCUMENT
&& request.resource.data.description is string
&& request.resource.data.endMo is number
&& request.resource.data.startMo is number
&& request.resource.data.openMO is bool
&& request.resource.data.pdf is string
&& request.resource.data.Adress == resource.data.Adress //USER can't update this field
&& request.resource.data.size() <= 40;
如果所有字段都已填写,则此方法有效。
情况 1 -> 有效
原始文档
{
'description': 'helloworld',
'endMo': 12,
'startMo': 6,
'openMo': true,
'pdf': 'url',
'adress': 'myAdress',
}
db.collection("myCol").doc("myDoc").update({
'description': 'helloworld2',
}
情况 2 -> 不起作用
原始文档
{
'adress': 'myAdress',
}
db.collection("myCol").doc("myDoc").update({
'description': 'helloWorld',
}
为什么规则不接受添加值而只接受更新已经存在的值?
【问题讨论】:
-
请编辑问题以显示被规则拒绝的确切代码。规则本身是没有意义的,没有它们旨在允许的特定查询。考虑到问题中的所有细节,我们应该能够重现这种情况。
-
正如@DougStevenson 提到的,请添加它旨在允许的查询。只是一个猜测:您是否在情况 2 中使用“点符号”?如果没有,您应该... firebase.google.com/docs/firestore/manage-data/…
标签: firebase google-cloud-firestore firebase-security