每个租户的多租户和自定义功能

时间:2019-11-19 13:14:16

标签: laravel multi-tenant multiple-databases

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

我们都知道多租户使用每个租户专用的DB的好处,所以我不再赘述。就我而言,它100%适合我的需求。

我的问题:

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

有什么想法吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

有多种方法可以实现多重延迟。

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

第一种方式:

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

第二种方式:

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

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

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

用于特定租户的功能切换。您可以使用列feature_nameis_enabledtenant_id创建要素表。

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