我试图编写一个只允许添加特定类型值的安全规则。
这就是我现在拥有的:
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',
}为什么规则不接受值的添加而只接受已经存在的值的更新?
发布于 2020-03-09 04:14:20
请记住,在更新成功后,request.resource.data始终包含文档中字段的所有。这包括文档中的所有现有字段。
在情况下进行更新是因为文档的新内容满足所有条件。
第二种情况下的更新不起作用,因为它失败了对文档中不存在的字段的所有检查,并且在更新中也没有提供。如果您希望第二种情况能够正常工作,就必须对规则进行编码,这样就不需要像现在这样的特定类型的缺失字段。
https://stackoverflow.com/questions/60577634
复制相似问题