首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持组写访问的Firestore架构

支持组写访问的Firestore架构
EN

Stack Overflow用户
提问于 2021-11-03 17:47:26
回答 1查看 28关注 0票数 1

我正在尝试设计一个firestore模式,它允许许多组的人只编辑他们自己组的文档,但服务范围内的任何人都可以阅读它们。在firestore的安全规则设置中,这似乎是不可能的。

基于角色的访问

Firebase支持role-based access control,但它适用于整个服务的文档,我不能支持很多组。

自定义角色是通过gcloud控制台创建和分配的,因此我无法为每个组创建新的动态自定义角色,以便它们拥有自己的组。

Firestore触发复制文档

我考虑使用firestore触发器(onCreate、onUpdate、onDelete)将文档复制到同一组中的其他用户的子集。这样做的问题是它可能会创建一个无限的触发器循环,因为每个成员都可以更新一个文档。从理论上讲,您可以在复制的文档上使用一个属性集来防止这种情况发生,但它感觉有点笨拙和脆弱。

有没有最佳实践,或者Firestore不可能做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-03 17:53:47

使用Custom Claims的Firebase身份验证可能非常适合此用例。您可以添加一个索赔groupId,并将其值设置为该用户所属的组的ID。如果用户可以是多个组的一部分,则存储一个groupIds数组。您可以在security rules中检查此groupId是否包含在用户的声明中。

您必须将groupId存储在每个文档中,这样我们才能知道该文档属于哪个组。您可以尝试以下规则:

代码语言:javascript
复制
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /collection/{docId} {
      allow read, write: if resource.data.groupId == request.auth.token.groupId;
    }
  }
}

以上规则将允许用户仅当文档中的groupId与其自定义声明中的groupId匹配时才能读取和写入文档。

自定义声明只能在安全环境中使用Firebase Admin SDK进行更改,因此您可能必须使用云函数/服务器将用户添加到其各自的组中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69829498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档