【问题标题】:Limit access to firestore based on query conditions根据查询条件限制对firestore的访问
【发布时间】:2020-05-21 20:44:16
【问题描述】:

我有一些firestore数据如下:

/team/[id]

{
  teamName: "My team"
  members: []
  inviteCode: "jfds621jd"
}

我想编写一个安全规则,以便任何用户都可以阅读任何团队,但前提是他们根据邀请代码进行查询。否则,如果他们的 auth.uid 在 members 数组中,我只希望他们能够读取团队。

换句话说,这个查询对于任何用户都应该成功:

firebase.firestore().collection('teams').where('inviteCode', '==', 'jfds621jd');

但是这样的事情(不是基于邀请码的查询)应该会失败,除非当前的 UID 在成员数组中。

firebase.firestore().collection('teams').get()

在弄清楚这一点时遇到了一些麻烦。似乎没有办法访问安全规则中的查询“where”条件。

谢谢!

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-security


    【解决方案1】:

    这对于安全规则是不可能的,因为它根本不安全。

    如果你想创建一个简单的明文密码系统,你必须创建一个后端来检查你传递给它的参数。它可以执行查询,检查文档字段的值与密码是否相等,然后选择发送(或不发送)文档内容。

    安全规则可以验证和拒绝进入文档以进行写入操作的数据,但它无法验证查询过滤器并根据在每个文档中看到的内容进行拒绝。

    简而言之,如果您想允许对集合进行公共查询访问(list 权限),那么整个世界都可以有效地看到整个集合,并根据需要对其进行过滤(或不过滤)。您可以在安全规则中使用的有关查询的唯一内容是为 request.query 记录的内容。

    也许您想改为使用 UID 或 Firebase Auth 提供的一些其他数据来邀请特定用户帐户,如 request.auth 中所标识。

    【讨论】:

      猜你喜欢
      • 2011-06-18
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 2023-02-08
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多