Firestore安全规则基于其他文档

问题描述 投票:0回答:1

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

我的数据库是这样的:

订单集合

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

但它不起作用

firebase google-cloud-firestore firebase-security-rules
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.