作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个管理各种联盟的 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/
我是一名优秀的程序员,十分优秀!