【发布时间】:2021-08-18 04:16:29
【问题描述】:
我有一些规则,例如:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /teams/{teamId} {
allow read, write, delete, list:
if debug(teamId) in debug(request.auth.token.teams)
allow create:
if true;
}
}
}
我正在使用声明来控制访问。每个用户的令牌中都有一组团队。这部分工作正常。
基本上,teamId(来自路径)不存在。此变量的日志中没有打印任何内容。我不知道发生了什么事。是否有其他方法可以访问该 teamId 变量?
通过做一些日志,似乎访问 /teams/teamXXXX 我得到了多个规则命中。首先在 /database/default/documents/teams 上,然后在 /database/default/documents/teams/teamXXX 第一次通过规则失败,因为 {teamId} 未在该路径上定义。我需要以某种方式允许访问集合,同时限制对子文档的访问
看来我访问团队的方式可能会导致问题。我通过以下查询获得团队:
instance.collection("teams").where('owners',
arrayContains: FirebaseAuth.instance.currentUser!.uid);
这必须在路径中没有 {teamId} 的情况下触发规则检查。我想把我的比赛声明包装起来:
match /teams/{document=**}
allow read:
if (request.auth.uid != "")
match /teams/{teamId} {
allow read, write, delete, list:
if debug(teamId) in debug(request.auth.token.teams)
allow create:
if true;
}
}
我担心这只会允许所有文件。我被卡住了。
【问题讨论】:
-
通过做一些日志,似乎访问 /teams/teamXXXX 我得到了多个规则命中。首先在 /database/default/documents/teams 上,然后在 /database/default/documents/teams/teamXXX 第一次通过规则失败,因为 {teamId} 未在该路径上定义。我需要以某种方式允许访问集合,同时限制对子文档的访问。
-
请edit您的帖子包含您对问题的任何其他信息。避免在 cmets 中添加它,因为它们更难阅读并且更容易删除。帖子的编辑按钮就在帖子标签的下方。
-
如果你有任何私有数据,我会建议像 thread 这样使用私有字段的实现。并且通过限制对子文档的访问来访问集合,我建议有一个单独的集合,其中包含您拥有的集合的名称和有关它们的简要数据。请检查它是否有帮助。你也可以看看这个documentation?
-
我使用的是 FireStore 而不是 Firebase 实时数据库。我认为这不支持私有字段。
标签: google-cloud-firestore rules claims