【问题标题】:Firestore security rules based on an other documents基于其他文档的 Firestore 安全规则
【发布时间】:2019-07-23 18:54:57
【问题描述】:

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

我的数据库是这样的:

订单收集

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

但它不起作用

【问题讨论】:

  • 你能澄清{OrderId}的来源吗?

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


【解决方案1】:

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

鉴于您当前的设置,无法编写满足您需求的规则。您可能需要考虑另一种(附加)数据库结构,可能需要一个文档,其中的字段是要检查的值数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-19
    • 2019-06-15
    • 1970-01-01
    • 2019-03-03
    • 2020-05-23
    • 2018-03-22
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多