我正在编写一个反应小程序来管理各种联赛。
我的问题是如何允许正确的用户访问(读,写)联赛的比赛日。比赛日的名称为“ matchday-1”,“ matchday-2”,依此类推,是文件(比赛)的集合,并且是联赛内部的子集合。
我的 firebase结构基本上是这样的: 联赛(集合)->联赛(文件)-> Matchday-n(集合)->比赛-M(文件) 其中n和m是数字。
联赛文档包含一个名为“创建者”的字段,该字段包含创建该联赛的用户的ID。只有他们可以访问它及其比赛日!
但是看起来,当我访问比赛日时,firebase规则中resource.data.creator
的值与我访问联赛本身时的值不同。
我的问题是:我必须执行哪个规则,以便只有创建联赛的用户才能访问该联赛及其子集合?
我试图找到一种方法将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
}
}
}
这取决于我如何摆弄规则集,但是在提供的代码的情况下,尝试访问(读取或写入)创建者错误的联赛时会遇到“缺少权限或权限不足”的情况,这很好,但即使是正确的创建者,我也无法访问比赛日。
答案 0 :(得分:0)
您缺少一些语法。可能应该是这样:
match /leagues/{league}/{document=**} {
allow read, write: if request.auth.uid ==
get(/databases/$(database)/documents/leagues/$(league)).data.creator
}
请注意,creator
之前有一个data
属性。这使您可以访问文档Resource对象的原始字段值。