在 many-to-many 关系上使用 Firebase 为 SaaS 应用程序建模的最佳实践是什么

What is best practice for modeling a SaaS app with Firebase on a many-to-many relationship

我有两个 collection:一个 org 和一个 user。用户可以是 org A 的普通用户,但也可以是 org B 的管理员。所以用户 collection 看起来像这样:

{
email: "john@example.com",
name: "John Doe",
access: [
    {
        org: "orgA",
        role: "user"
    },
    {
        org: "orgB",
        role: "admin"
    }
]}

将所有内容保持不变的问题 collection 是我不喜欢 org A 的管理员更新 access 数组并影响 org B。如果我在显示每个 collection 的用户列表时将 sub-collection 中的 sub-collection 数组移动到 /user collection 下,我将不得不做一个要求每个用户获取访问信息。我应该将用户 ID 保存在 /org collection 下的 sub-collection 数组中吗?

我想我的目标是找到这个问题的最佳实践解决方案。

你有两种做法,一种是在user中插入一个access的key,access中也一样。否则,您可以使用 Junction table,同时使用两者的 ID。没有确切的答案,正确的安全规则和性能几乎是一样的。然后根据您认为最适合您设计的方法来决定。

我能想到的最简单的数据库结构是:

Firestore-root
   |
   --- users (collection)
   |    |
   |    --- $uid (document)
   |         |
   |         --- email: "john@example.com"
   |         |
   |         --- name: "John Doe"
   |         |
   |         --- userOf (map)
   |         |     |
   |         |     --- orgA: true
   |         |
   |         --- adminOf (map)
   |               |
   |               --- orgB: true
   |
   --- organizations (collection)
        |
        --- $orgA (document)
        |    |
        |    --- users: ["uidOne", "uidTwo"] (array)
        |
        --- $orgB (document)
             |
             --- admins: ["uidThree", "uidFour"] (array)

通过这种方式,您可以简单地查询“用户”集合来获取某个组织的普通用户,以及管理员,甚至两者。