基于其他文档的Firestore安全规则

时间:2019-03-01 17:39:50

标签: firebase google-cloud-firestore firebase-security-rules

我试图让用户仅在此文档中的字段等于其他文档列表中的字段时才可以阅读文档。

我的数据库是这样的:

订单收集

 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;
    }
  }
}

但是它不起作用

1 个答案:

答案 0 :(得分:0)

您应该注意安全规则的一些限制。首先,您无法在规则中执行查询。您只能指示您要阅读单个文档。您必须能够通过其唯一路径引用该文档。无法读取整个收藏集。其次,每个规则只能读取10个文档。

鉴于您当前的设置,无法编写符合您需要的规则。您可能想考虑一个不同的(附加)数据库结构,也许它需要一个文档,该文档的字段是要检查的值数组。

相关问题