gpt4 book ai didi

firebase - Firestore 规则 : How do I allow access to a subcollection depending on a field of the document that contains it?

转载 作者:行者123 更新时间:2023-12-03 19:26:44 25 4
gpt4 key购买 nike

我正在编写一个管理各种联盟的 react 小程序。

我遇到的问题是如何允许正确用户访问(读取、写入)联赛的比赛日。比赛日被命名为“matchday-1”、“matchday-2”等,并且是文档(比赛)的集合,并且是联盟内的子集合。

我的 火基结构看起来基本上是这样的:
联赛(收藏)-> 联赛(文档)-> 比赛日-n(收藏)-> 比赛-m(文档)
其中 n 和 m 是数字。

这是问题:

联赛文档包含一个名为“creator”的字段,其中包含创建该联赛的用户的 ID。只有他们应该访问它和它的比赛日!

但看起来,当我访问比赛日时,resource.data.creator 的值在firebase规则中与我访问联盟本身时不同。

我的问题是:我必须实现哪条规则,以便只有创建联盟的用户才能访问它及其子集合?

我试图找到一种方法来比较 request.auth.uid给联盟的创造者。

我试过这样的事情作为条件:request.auth.uid == get("path-to-league").creator,正如您在我提供的代码中看到的那样。
但它似乎不是这样工作的,因为我可能错误地引用了路径。

这是我目前的代码:

rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /leagues/{league} {
allow read, write: if request.auth.uid == resource.data.creator
}
match /leagues/{league}/{document=**} {
allow read, write: if request.auth.uid == get(/databases/$(database)/documents/leagues/$(league)).creator
}
}
}

取决于我如何处理规则集,但在我提供的代码的情况下,当我尝试访问(读取或写入)创建者错误的联盟时,我会得到“权限缺失或权限不足”,这很好,但即使如果是正确的创建者,我将无法访问比赛日。

最佳答案

您缺少一些语法。应该是这样的:

match /leagues/{league}/{document=**} {
allow read, write: if request.auth.uid ==
get(/databases/$(database)/documents/leagues/$(league)).data.creator
}

注意这里有一个 data 之前的房产 creator .这使您可以访问文档 Resource 对象的原始字段值。

关于firebase - Firestore 规则 : How do I allow access to a subcollection depending on a field of the document that contains it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57060043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com