【发布时间】:2025-12-03 15:05:03
【问题描述】:
多租户应用集合组查询的最佳做法是什么?例如查询租户客户的所有发票
/tenant/1/customer/2/invoices
如果我创建一个名为 invoices 的集合组索引,并且我想确保我可以获得租户 1 的所有 invoices,我该如何轻松地做到这一点?
我尝试设置一些安全规则来防止查询租户,但它仍然抛出拒绝访问错误,因为它仍在跨租户查询。正确的 Firestore 规则是什么样的
【问题讨论】:
-
有一个可接受的答案,但根据您的 cmets,在继续之前需要一些额外的数据。虽然您可以根据@DougStevenson 的建议创建多个项目,但 5 或 10 个可能是可以管理的,但 500 个会失控。例如,Firebase 规则是每个项目。如果您向文档添加新字段,则可能需要通过 Rules 对其进行保护。然后,您必须更新 500 个不同项目的规则。我不知道您的代码库,但您还必须拥有 500 个不同的 plist、500 组不同的身份验证等。换句话说,请仔细考虑。
-
@Jay 我不担心规则,因为它们在项目之间是一致的,但我更关心通过 ci 部署和保持所有最新状态
-
明白。试想一下,对规则进行细微调整,然后必须重复该操作 500 次:Firebase 控制台,选择第一个项目-> 规则,粘贴更改,保存。选择项目2->规则,粘贴更改,保存。冲洗,重复 500 次 - 每次进行更改。然后考虑拥有 500 个完全不同的身份验证集和 500 个不同命名的应用程序。顺便说一句,我是 Firebase 的拥护者,但想确保您拥有所有数据。我一开始就没有那条腿,我花了一年的时间来开发,只是为了改变平台。
-
@Jay 但这不能通过一些自动化的 ci 过程来解决吗?
-
我相信可以通过 Firebase 命令行界面部署规则,但这为项目增加了另一层。尽管我认为它缺少一些功能,例如回滚,而且我认为没有直接的版本控制。不过,请注意额外的复杂性和资源。
标签: firebase google-cloud-firestore