首页 > 解决方案 > 如果子集合中存在用户电子邮件,则 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。

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


您将需要使用文档中描述的语法构建文档的正确路径我建议您仔细阅读)。我建议使用用户的 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))

推荐阅读