【问题标题】:Best Practice to Store Ownership of a Document in Firestore在 Firestore 中存储文档所有权的最佳实践
【发布时间】:2021-12-01 21:37:07
【问题描述】:

假设我有一个集合 todos,其中包含代表用户待办事项列表的文档。

为了保护这些文档,您通常可以找到以下安全规则的 sn-ps:

...
match /todos/{todo} {
    allow create: if request.auth.uid != null && request.resource.data.ownedBy == request.auth.uid;
    allow read, update, delete: if resource.data.ownedBy == request.auth.uid;
}
...

只要ownedBy 字段与执行请求的人的uid 相同,这些规则就允许对文档进行CRUD 操作。

我担心的是ownedBy 字段也是该文档的一部分,这意味着用户可以轻松地将ownedBy 修改为不同的userId。我怀疑有人会出于任何原因这样做,但从开发人员的角度来看,这是否意味着让您所依赖的字段成为可编辑文档的一部分是危险的?

另一种看待它的方式是,此行为与将权限/授权存储在同一文档中相同。将{ canEdit: true, canDelete: false} 存储在同一个文档中是错误的,那么为什么可以将ownedBy 字段存储在该文档中?

有什么好的做法可以解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    "用户可以轻松地将 ownBy 修改为不同的 userId"

    根据你的规则,他们实际上不能。您正在明确检查 resource.data.ownedBy == request.auth.uidrequest.resource.data.ownedBy == request.auth.uid。鉴于 request.auth 是由 Firebase 自动填充的并且不能被欺骗,他们可以为 ownedBy 设置的唯一值是他们自己的 UID。

    我还建议您查看 controlling access per field 上的 Firebase 文档。

    【讨论】:

      猜你喜欢
      • 2020-03-16
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 2010-12-24
      • 2019-11-27
      • 1970-01-01
      • 2013-05-10
      • 2011-11-23
      相关资源
      最近更新 更多