firebase - Firebase 和 Firestore 的 Multi-Tenancy 设置是否可行?

标签 firebase google-cloud-firestore

我正在考虑使用 Firebase 和 Firestore 创建一个 Multi-Tenancy 应用程序。租户的数量将很少(最初大约为 6 个),并且最终用户不会在应用程序上创建自己的实例,它将受到管理员的严格控制。

我的理想情况是只有一个应用程序,我可以将多个域附加到其中,并将请求路由到特定数据库以完成它们。

我有几个担忧:

我在文档中读到我可以为每个应用程序创建多个数据库,但在我的管理面板中没有看到选项,所以我不确定当前文档是否不正确(或者它是否指的是实时数据库)。

我不希望注册的用户注册到所有租户,并且考虑到 Firebase 身份验证的工作方式,我看不到任何可以指定用户注册到哪个域的方法。我曾想在一个跟踪用户所属域的集合中管理它,并假装它看起来像是让用户孤立无援,但是如果用户在“两个”租户中注册,并且想要更改他们的登录凭据,这会在整个网络中更改它们,并且可能会造成混淆。

所以听起来这不会像我想要的那么干净,这将指向我的选项 2:

有一个前端应用程序,它引用了它可以连接到的所有 Firebase 应用程序,并联系不同应用程序的后端以保持数据和用户身份验证的分离。这将解决孤立的用户问题,但随后我将在后端维护几个不同的应用程序,而制作该产品的新版本的重点是避免必须维护多个相似但略有不同的代码库。该问题的解决方案是从相同的代码库部署到 firebase 上的不同应用程序:CLI 是否允许我每次都选择我的部署目标?

我想选项 3 是让一个 headless React 应用程序联系节点服务器或其他东西,但是我会失去所有很酷的 Firebase 优点,而且我真的在挖掘 Firebase。

这是一个可以解决的问题吗?还是我想把一个方钉塞进一个圆孔?

谢谢!

最佳答案

我的团队最近解决了一个类似的情况,我们需要使用 Firebase 跨多个租户部署单个 Angular 应用程序。

我们提出的解决方案与您的第二个选项非常相似:

  • 在 Firebase 控制台上创建单独的 Firebase 项目,为您计划支持的每个租户创建一个。
  • 安装 CLI 并以有权访问您刚刚创建的每个项目的帐户登录后,添加 .firebaserc在您的根目录中为每个新创建的项目设置别名。这看起来像:
  • {
      "projects": {
        "dev": "my-dev-project-id",
        "tenant1": "my-tenant1-project-id",
        "tenant2": "my-tenant2-project-id"
      }
    }
    
  • 您现在可以通过以下方式在本地提供连接开发 Firebase 项目的代码:firebase serve -P dev并通过以下方式部署特定项目:firebase serve -P dev .默认情况下,这会将您的项目部署到 Firebase 托管并部署您创建的任何相关云功能,但您可以轻松地 customize this behavior .
  • 要一次部署所有项目,请设置一个简单的 ./deploy-all.sh脚本来迭代项目并替换每个别名。您还可以自定义它以在部署每个项目之前运行 linting/instillation 等。
  • Firebase 托管将 automatically host每个域在 your-app.firebaseapp.comyour-app.web.app .您也可以customize the subdomains每个项目映射到。

  • 注意事项:
    上述方法依赖租户 URL 将项目数据库映射到用户信息。在移动设备上,这种方法变得稍微复杂一些。我们让用户在移动设备上输入一个动态映射到 firebase 配置的 key ,但可能有更好的方法来解决这个问题。

    关于firebase - Firebase 和 Firestore 的 Multi-Tenancy 设置是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54150421/

    相关文章:

    android - 错误 :(31, 32) 错误:找不到符号类 AuthCredential

    javascript - 如何在不再次调用 db.collection 的情况下获取文档并编辑数据?

    firebase - Firestore 的复杂数据模型

    flutter - 未处理的异常 : type 'Future<void>' is not a subtype of type 'Future<Photography>' on Firestore

    Firebase 数据库规则,仅当文档属性等于经过身份验证的用户 ID 时才允许删除

    flutter - 删除 firestore 表中的 map

    Firebase Cloud Functions 使用 API key 保护 HTTPS 端点

    javascript - 火存储 : can't match midnight with date filter in where() clause

    Angular + Firestore : how to allow public read access to a document

    javascript - Firebase 数据库触发器 - 从快照获取数据库对象