【问题标题】:Can I use includes in a firebase rule if I'm checking array?如果我正在检查数组,我可以在 firebase 规则中使用包含吗?
【发布时间】:2020-03-15 15:57:51
【问题描述】:

我有一组邀请,但出现权限不足错误。

数据

"inviteID" : {
  playerEmail: 'jon@doe.com',
  teamID: 'abcdefg'
}

和一个团队

"teamID" : {
  ...
  managers: [managerID, ...]
  ...
}

使用以下查询:

团队经理

查询看起来很简单

db.collections('invites').where('teamID', '==', myTeamID)

但规则必须检查查询的人是否是经理......

match /invites/{inviteID} {
      function isManager() {
        // managers is an array
        return get(/databases/$(database)/documents/teams/$(resource.data.teamID)).data.managers.includes(request.auth.uid)     
      }
            allow read: if (isManager())
    }

我也有这条会失败的规则有关系吗?

    // Allow user to read his own invites
    match /invites/{inviteID} {
        allow read: if (request.auth.token.email == resource.data.playerEmail)
    }

匹配同一文档的第二条规则将失败,因为显然邀请不会与经理具有相同的电子邮件。我需要这条规则作为单独的查询允许用户查询他们的邀请。

似乎没有阅读,我遇到了权限问题。感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    所以我把规则改成了

    return request.auth.uid in get(/databases/$(database)/documents/teams/$(resource.data.teamID)).data.managers
    

    这似乎解决了我的权限错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 2012-12-11
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多