我试图让用户只有在本文档中的字段等于其他文档列表中的字段时才能读取文档。
我的数据库是这样的:
订单集合
Order 1
id: order1
Order 2
id: order2
OrderLines集合
ljsdfozdkfjz
order: order1
ozjehfeofheof
order: order1
ojezihfoekfjf
order: order32
pjeopajfoekfss
order: order69
在这里,如果文档包含用户有权访问的订单的订单ID,我希望用户能够读取OrderLines集合中的所有订单行。
我试过这个安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /OrderLines/{OrderLinesId=**} {
allow read: if resource.data.order == get(/databases/$(database)/Orders/{OrderId}).data.id;
}
}
}
但它不起作用
您应该注意安全规则的一些限制。首先,您无法在规则中执行查询。您只能表明您要阅读单个文档。您必须能够通过其唯一路径引用该文档。无法阅读整个馆藏。其次,每条规则限制为10次文档读取。
鉴于您当前的设置,不可能编写满足您需求的规则。您可能想要考虑另一个(附加的)数据库结构,可能需要一个需要单个文档的字段,该字段是要检查的值数组。