【问题标题】:Multitenancy in FirestoreFirestore 中的多租户
【发布时间】:2018-03-28 09:56:44
【问题描述】:

关于基于子集合值查询数据的实际限制,在 Firestore 中管理多租户的建议方法是什么?

我希望能够检索并限制对与用户所属的实体/公司相关的数据的访问。

示例数据结构:

/companies/{companyId}/users/
/companies/{companyId}/users/{user}/roles
/companies/{companyId}/docs/

/companies/{companyId}/users/ 可以收藏吗?

如何仅检索用户在/companies/{companyId}/users 中拥有角色的公司?

【问题讨论】:

  • 通常建议为不同的环境使用单独的项目,而不是将它们全部放在一个项目中。如果您这样做,您将对每个 Firebase 产品进行更好的隔离和访问控制。
  • @DougStevenson 请告诉我,现在情况已经改变了。这是一种可怕的多租户方式,尤其是因为似乎没有用于实际创建新项目的 API。
  • @DennisKrøger 什么都没有改变,也不可能改变。这一直是 Firebase 团队的建议。
  • @DougStevenson 这(以及缺少用户邀请功能)是促使我们改用 AWS 的主要问题。他们的多租户仍然不是很好,但至少在新客户/租户自己注册时是可行的。如果我们要使用推荐的 Firebase 方法,在没有项目创建 API 的情况下,我们必须有人手动添加租户。不会发生。真可惜,因为几乎所有其他东西似乎都与我们的用例完美匹配。

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


【解决方案1】:

Firestore 路径在集合和文档之间交替切换:

/collection/document/subcollection/subdocument

所以是的,在这种情况下,您将拥有 companiesusersdocs 的集合。集合也是隐式的,因为它们会在其中存在文档时自动创建,并在其中不存在文档时删除。

目前,不支持子集合查询(例如“给定公司中的所有用户”),因此您必须以另一种方式构建查询:在执行时将用户集合与公司作为属性用于查找该公司所有用户的查询。

ref.collection('users').where('company', '==', 'ACME').get().then((document) => {/* Do stuff here */});

【讨论】:

  • 非常感谢@mike-mcdonald
  • @mike-mcdonald 您能否谈谈或指出这与用户身份验证有何关系?我还想限制用户的访问,我觉得我们需要做的是能够为用户分配公司 id,然后限制对分配给该公司 id 的子文档的读/写。否则在此示例中,用户将无法访问所有其他用户的数据吗?谢谢!
猜你喜欢
  • 2020-11-27
  • 1970-01-01
  • 2018-03-23
  • 2020-11-27
  • 2019-06-06
  • 2018-05-07
  • 1970-01-01
  • 2021-02-15
  • 2021-02-15
相关资源
最近更新 更多