【发布时间】:2019-04-29 18:13:51
【问题描述】:
我已经阅读了几篇关于 SaaS、多租户等主题的帖子/主题(如 this、this 和 this),我得出的结论是其中大多数不符合我的要求:
- 我不需要多租户,因为我只会使用主域
- 我无法在 .env 或 database.config 中写入我的所有 MySQL 连接,因为它们都是动态的(至少是数据库的名称)
我需要的工作流程:
- 订阅 (SaaS) 包含数据库名称
- 每当用户登录时,都会为他的会话分配数据库名称
- 对用户数据库运行所有查询
例子:
- project_admin <- Main database
--- subscriptions <- Table
------ id | db_name
------ 1 | project_child_one
------ 2 | project_child_two
--- users <- Table
------ id | subscription_id
------ 1 | 1
------ 2 | 2
- project_child_one <- Child database
--- customers <- table
- project_child_two <- Child database
--- customers <- table
-
user 1登录时,从客户那里检索到的数据应该来自数据库project_child_one。 -
user 2登录时,从客户那里检索到的数据应该来自数据库project_child_two。
我希望将数据库名称保存在会话中,因此我不需要总是查询project_admin 来了解用户应该连接到哪个数据库。这是最简单的部分。
【问题讨论】:
-
不要在会话中存储数据库连接设置。相反,如果您必须拥有多个数据库,请考虑使用中间件根据经过身份验证的用户动态设置连接。
-
@MartinBean 我不会在会话中存储连接设置,只存储数据库名称。我还没有弄清楚如何通过这种方法使用中间件?