如何在像firestore这样的nosql解决方案中创建多租户数据模型?

问题描述 投票:-1回答:1

What do I mean by multi-tenant?

  1. 用户可以属于某个组织。
  2. 在没有任何人邀请的情况下注册的用户将被置于他们自己的组织(blah123)中作为其管理员。
  3. 多个此类用户是同一个基于Firestore的应用程序中他们自己的单个组织的创始人。他们可以邀请其他人和受邀者加入创始人的组织。
  4. 为组织创建的任何数据或该组织用户创建的任何数据都应该从其他组织的用户中分离出来。
  5. 如果需要,我们应该能够配置属于同一组织的用户,以查看该组织的其他用户创建的任何数据。

Question

作为专家,您认为这是为Cloud Firestore设计的不可能的数据模型吗?可以做到这一点的数据模型是什么样的?

firebase database-design google-cloud-firestore datamodel
1个回答
1
投票

作为专家,您认为这是为firestore设计的不可能的数据模型吗?

绝对不是不可能,其实很简单。

可以做到这一点的数据模型是什么样的?

您的用例的可能数据库架构可能是:

Firestore-root
   |
   --- users (collection)
   |    |
   |    --- uid (document)
   |         |
   |         --- organizations: ["organizationId", "organizationId"] (array)
   |         |
   |         --- //Other user properties
   |
   --- organizations (collection)
         |
         --- organizationId (document)
                |
                --- users: ["uid", "uid"] (array)
                |
                --- //Other organization properties
                |
                --- organizationData (collection)
                      |
                      --- organizationDataId (document)
                             |
                             --- //Organization Data properties

用户可以属于某个组织。

如您所见,用户的id添加在users数组中,该数组是每个organizationId文档中的属性。使用数组,您可以添加属于该特定组织的所有用户的所有用户ID。

在没有任何人邀请的情况下注册的用户将被置于他们自己的组织(blah123)中作为其管理员。

用户注册后,您可以通过生成新的organizationId并在users数组中添加用户来创建新组织。

多个此类用户是同一个基于Firestore的应用程序中他们自己的单个组织的创始人。他们可以邀请其他人和受邀者加入创始人的组织。

以上回答。

为组织创建的任何数据或该组织用户创建的任何数据都应该从其他组织的用户中分离出来。

如您所见,我在organizationData文档下创建了一个名为organizationId的子集合,您可以在其中添加组织数据作为文档。因为您已经拥有该组织的用户的uid,所以您可以简单地使用Firestore security rules来仅允许这些用户读取该数据。

如果需要,我们应该能够配置属于同一组织的用户,以查看该组织的其他用户创建的任何数据。

在这种情况下,当用户加入组织时,您应首先获取该组织的所有用户对象,然后查询数据库以获取这些用户所在的所有组织,并在所有这些组织中复制uid。

而已 :)

© www.soinside.com 2019 - 2024. All rights reserved.