【问题标题】:Firestore Permission Rule Ignoring roles in parent collectionFirestore 权限规则忽略父集合中的角色
【发布时间】:2021-05-17 14:18:29
【问题描述】:

我正在尝试编写一个简单的 Firestore 规则,该规则仅在用户是父文档中的管理员时才允许创建。父文档如下所示:

{
  ...,
  roles: {
    uid: 'admin'
  }
}

我尝试使用的规则是这样的

    match /cookbooks/{cookbookId}/{document=**} {
      allow write: if get(/databases/$(database)/documents/cookbooks/$(cookbookId)).data.roles[request.auth.uid] == 'admin'
    }

这不起作用,但如果我这样做就够奇怪了

    match /cookbooks/{cookbookId}/{document=**} {
      allow write: if get(/databases/$(database)/documents/cookbooks/$(cookbookId)).data.roles != null
    }

这行得通。所以这让我相信它得到了角色,但我不知道为什么第一条规则不起作用。我已经三重检查了我的 Firestore 数据是否正确,并且我的 uid 在角色对象中的值为“admin”

【问题讨论】:

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


    【解决方案1】:

    您是否确实将父文档中的 uid 值代替了示例中的 uid?就像uid = 123 一样,它会变成

    {
      ...,
      roles: {
        123: 'admin'
      }
    }
    

    【讨论】:

      【解决方案2】:

      您可以尝试像这样直接从uid 获取数据吗:

      match /cookbooks/{cookbookId}/{document=**} {
            allow write: if get(/databases/$(database)/documents/cookbooks/$(cookbookId)/roles/$(request.auth.uid)).data == 'admin'
          }
      

      【讨论】:

      • 这个不行,没有/roles/{uid}文件
      • 对不起。从您写的问题看来,它确实存在。您能否分享一个更详细的数据库和结构示例。下次尝试更好地解释您的问题,而不是对试图帮助您的人投反对票。
      猜你喜欢
      • 2021-07-17
      • 2021-11-14
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多