【问题标题】:Firestore security rules - using custom claimsFirestore 安全规则 - 使用自定义声明
【发布时间】:2020-02-29 22:23:31
【问题描述】:

我只是想确保我正确理解了自定义声明,以下是我希望如何使用它们的一个示例:在我的应用中,我将每个用户关联到一个唯一的用户友好用户 ID(如“Bill”),以及一些我的安全规则使用此 ID。用户信息和配置文件存储在一个文档 /users/{user} 中,我还存储了相应的 Firestore 身份验证 ID。

例如:在文档 /users/bill 我有

  { firstname: "William"
    lastname: "Clinton"
    ...
    userid: "Bill"            // Case sensitive userid
    uid: "faergq34tfawefawef" // A valid Firestore authentication id }

然后我有一些集合,我想根据这个用户 ID 定义访问权限,例如:

match /users/{user}/friends/{friend} {
  allow create, update: if request.auth.uid != null
    && get(/databases/$(database)/documents/users/$(user)).data.uid==request.auth.uid;
}

使用自定义声明,规则可能看起来像:

match /users/{user}/friends/{friend} {
  allow create, update: if request.auth.uid != null
    && request.auth.token.userid.lower() == user;
}

更简单,每次执行规则时节省 1 次读取。任何反馈?这有意义吗?在重写所有规则之前确保我没有遗漏任何东西......

【问题讨论】:

    标签: google-cloud-firestore firebase-security


    【解决方案1】:

    我不知道您为什么要在规则中使用 userid,而通常的 Firebase uid 似乎同样独特,并且始终在 request.auth.uid 中可用。我认为userid 仅对显示目的很重要。

    自定义声明的目的是将数据附加到授予其特殊特权或权限的用户帐户。通常人们会在其中放置一个布尔值来授予“管理员”访问权限,或者表示某种类型的组成员身份。

    用户 ID 并不是真正意义上的任何一种。虽然将用户 ID 放在自定义声明中不一定错误,但我看不出它在这里有什么价值。用户已经拥有一个带有其 Firestore UID 的唯一 ID - 这应该是检查用户身份的首选方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 2018-07-23
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      相关资源
      最近更新 更多