我开发了一个由 firestore DB 支持的应用程序,其中 firestore 函数会触发我的用户所做的一些特定事件。
我正在考虑为我的一些客户拒绝在“专用实例”(=租户)上使用此应用程序,他们希望使用自己的 Firestore 数据库和用户。
我已经看到,自从 firestore 函数 v2 以来,我们现在可以控制触发事件的数据库,这让我认为我可以通过专用的 firestore 数据库实现多租户。
但是(我猜这是一个很强的但是),看起来我在 Firestore 项目中只能有 1 并且只有 1 个 Firestore 身份验证配置(在
https://console.firebase.google.com/u/0/project/<projectId>/authentication/users
中)。
这意味着来自不同客户/多租户的所有用户都将被整合到一个单个(共享)数据库。
我们似乎无法在基于身份的 firestore 函数中限制(或获取)数据库,这一事实也证实了这一点(请参阅 https://firebase.google.com/docs/reference/functions/第二代/节点/firebase-functions.identity)
我的假设正确吗?或者您是否看到我会错过的其他选项?
如果我是对的,这意味着我除了为每个租户创建 1 个 firestore project 之外别无选择,以确保用户永远不会在我的租户之间共享。
Firebase 身份验证每个进程记录的用户集实际上与任何特定的 Firestore 数据库没有任何关系。 Firebase Auth 使用自己的内部“数据库”来管理整个用户集,该数据库与 Firestore 完全分开。 正如你所说,没有“损坏”。
如果您确实想要创建仅供某些用户使用的 Firestore 实例,则由您的应用程序逻辑来强制执行。 您当然可以尝试使用“安全规则”来实现这一点,这些规则确定当访问直接来自您的 Web 或移动应用程序时哪些用户可以读取和写入哪些数据库实例。 但是,当访问来自您的后端时,这些安全规则并不适用 - 您的后端将需要逻辑来确定任何给定用户/租户的访问内容。 您在问题中没有提供足够的信息来了解是否绝对需要为每个租户创建一个单独的项目。 但这样做很常见,因为这是真正强制租户数据库访问的唯一方法,并且由此类系统的开发人员编写的附加应用程序逻辑最少。 最后,由您决定是否值得编写应用程序逻辑来处理单个项目中的每个租户逻辑,或者构建一些使用多个项目的基础设施。 确实可以选择任何一种方式:这是你的决定。