当我有一个检查子字段的安全规则时,出现“缺少权限不足”的信息。例如:
"start-production": "npm run build && config/startserver.sh"
我在rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /entries/{id} {
allow read: if resource.data.business.id == "hh7AvLpTbFGRmCGodLV4";
}
}
}
收藏集中拥有的唯一文档:
entries
我的查询:
{
"batchId": "bnzVkufp9mM6yGokUYug",
"business": {
"id": "hh7AvLpTbFGRmCGodLV4"
}
}
如果我将安全规则更改为firestore()
.collection('entries')
.where('batchId', '==', 'bnzVkufp9mM6yGokUYug')
,它将正常工作。有什么我想念的吗?
注意:
答案 0 :(得分:0)
要意识到的一件事是security rules are not filters。
现在,您的规则是说,“条目”集合上的所有查询都必须为business.id
指定一个等于“ hh7AvLpTbFGRmCGodLV4”的过滤器。您现在拥有的查询没有该过滤器,因此规则总是会拒绝它。如果您希望查询使用这些规则,则必须像这样:
firestore()
.collection('entries')
.where('batchId', '==', 'bnzVkufp9mM6yGokUYug')
.where('business.id', '==', 'hh7AvLpTbFGRmCGodLV4')