Jer*_*emy 19 php saas multi-tenant symfony doctrine-orm
我正在开发一个需要支持多租户模型的应用程序.我正在使用symfony2 php框架和doctrine2.
我不确定构建此要求的最佳方法.Symfony的ACL功能是否提供了解决方案的一部分?
您可以提供哪些建议或想法?是否有任何已实施此策略的示例symfony2应用程序或开源应用程序?
我的第一个想法是在所有表中使用tenant_id列,并将其与应用程序中的帐户对象相关联.我不确定ACL是否应该照顾我想要做的事情,或者你是否还要对所有针对你的对象的查询负责,这样他们就不会返回未经授权的数据.
如果我没有使用Doctrine,可能很容易说只是附加Where tenant_id = @accountid到每个查询,但我不确定这是正确的方法.
谢谢
我们已经这样做了一段时间了(尽管没有symfony和doctrine,但问题仍然存在) - 我们从一个庞大的数据库开始,并在每个表中的每行实现一个"环境标识符".这种模式迁移很简单:所有代码都是统一的,因此模式更改只是对代码和模式的单一更改.
然而,这会导致速度问题(大型表格),敏捷性(移动/备份等大型数据集比很多小型数据集更加密集),当然更容易破碎的环境,因为单个故障会拉低系统中的每个数据集. ..
然后我们切换到多个数据库; 每个环境都有自己的架构.通过利用Doctrine提供的迁移(在我们的例子中为1),我们能够快速更新整个应用程序或仅单个环境.此外,在帐篷之间移动特定变化的能力允许更快的速度和优化精度.
我的建议是:创建一个扩展到不同租户的单个核心,并保持每个帐户的本地自定义数据库配置.(在类似app.ini的结构中)
即
/
apps/
tentant1/
models/ <--- specific to the tenant
libraries/ <--- specific to the tenant
config/
app.ini <--- specific configuration
tentant2/
/**/ etc
core/
models/ <--- system wide models
libraries/ <--- system wide libraries (i.e. doctrine)
core.ini <--- system wide configuration
Run Code Online (Sandbox Code Playgroud)
这可以保持一切井然有序.我们甚至可以为每个帐篷提供核心的结构.因此能够覆盖特定于租户的"核心"的每个方面.
| 归档时间: |
|
| 查看次数: |
4337 次 |
| 最近记录: |