firebase - 如果子集合中存在用户电子邮件,则 firebase 规则
问题描述
我正在尝试从 docid 是氏族名称的氏族集合中检索文档,但我想确保只有用户所在的氏族是可检索的。
clans 集合包含以 clanname 作为 id 的文档,其中包含成员的子集合,其中包含以用户电子邮件作为 doc id 的文档。
部落(收藏)=> 部落名称(文档)=> 成员(收藏)=> 成员(文档)
如何检查氏族以确保 request.auth.token.email 是成员子集合中的文档
我认为我需要让成员与 request.auth.token.email 相等,但不确定在规则中的哪个位置。
firebase
.firestore()
.collection("clans")
.doc(clanName)
.get()
.then(clan => {
this.clan = clan;
});
match /clans/{clanName} {
allow create;
allow read: if exists(/databases/clans/documents/{clanName}/members/{member});
}
members 子集合将包含多个文档,其中用户电子邮件作为 documentIds。
解决方案
您将需要使用文档中描述的语法构建文档的正确路径(我建议您仔细阅读)。我建议使用用户的 UID,因为这是唯一标识帐户的最佳方式:
allow read: if exists(/databases/$(database)/documents/clans/{clanName}/members/$(request.auth.uid))
如果您必须使用电子邮件,我强烈建议您避免使用此类安全规则,因为您以后可能会遇到问题:
allow read: if exists(/databases/$(database)/documents/clans/{clanName}/members/$(request.auth.token.email))
推荐阅读
- powerbi - 创建一个度量以获取两个单元格均为空白的行数
- ios - UIPageViewController 中的动态页面数
- python - 在python Tkinter中,我有一个刻度(0到100),如何定义一个可以限制这个刻度的光标不超过50的命令?
- javascript - 如何将新值推送到值匹配的现有数组中?
- typescript - Intellij 禁用某些自动导入 (JSON)
- javascript - 如何修复 babel 意外的保留字“接口”错误
- documentum - EMC Dispatcher Classification Edit 7.10 不会开批
- django - Django SQLite 正则表达式查询很慢。本地 SQLite 正则表达式查询很快。为什么?
- rest - Project Online ProjectData/Ressources 被窃听?
- c# - 如何使包含在我的统一游戏中的 .NET 代码在 android 上运行?