【问题标题】:Multi-tenancy and custom features per tenant每个租户的多租户和自定义功能
【发布时间】:2019-11-19 22:33:53
【问题描述】:

我正在构建一个 Web 应用程序(使用 Laravel,但它无关紧要),它将有多个租户,每个租户都有自己的数据库。后端和前端代码端会通用。

我们都知道多租户的好处,每个租户都有一个专用数据库,所以我不再赘述。就我而言,它 100% 符合我的需求。

我的问题:

如果租户(客户)来找我进行定制(例如附加功能、更改当前功能、删除功能等),我该如何执行此操作?显然我无法更改所有租户的代码,所以我想我需要某种过滤或设置,以便我可以打开和关闭每个租户的功能。

有什么想法吗?

提前致谢。

【问题讨论】:

    标签: laravel multi-tenant multiple-databases


    【解决方案1】:

    有几种方法可以实现多租户。

    在这里,我想提出两种我之前在项目中实施的方法。

    第一种方式:

    1. 创建tenant 表。在每个 DB 表中添加 tenant_id 列。
    2. 在每个请求的header 部分中传递相应的租户ID。后端将从标头中获取租户 ID。

    第二种方式:

    1. 创建包含tenant_nametenant_uuid 值两列的租户表。
    2. 前端发送URL中的租户名称,如https://tenant1.xyz.com。创建一个拦截器来拦截前端请求并从 URL 中获取tenant name。根据该租户名称,您可以从 DB 获取特定的租户信息。
    3. 现在将该租户信息存储在您的应用程序的request context 中。
    4. 您可以随时随地使用该信息。

    在第一种方式中,您必须在应用程序的所有 layer 中传递租户 ID,这是不可取的。但是在第二种方式中,您可以从上下文中获取租户 ID,因此无需在所有层中传递它。

    现在第二个问题的答案是:

    用于特定租户的功能切换。您可以创建包含 feature_nameis_enabledtenant_id 列的特征表。

    现在假设您必须向X 租户显示仪表板功能,并且不想向Y 租户显示它。然后你只需要在这个表中启用和禁用。

    【讨论】:

    • 感谢您的回答!正如我在问题中提到的那样,我对多租户结构并不是很感兴趣(但总是很高兴听到其他人提供的内容),因为我正在使用第三种选择(每个租户都有自己的数据库,提供租户之间的物理层分离而不是逻辑)。我想您的功能分配方法是正确的道路。然后我应该检查这张表,然后继续。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2015-08-22
    相关资源
    最近更新 更多