Laravel Api 多租户中的多租户

Laravel Api mult-tenant within mult-tenant

我正在测试 laravel 来替换我已有的应用程序。

我实现了多租户 (https://tenancy.dev/docs/hyn/5.6),将数据库中的每个租户与通过子域访问的每个租户分开。

这解决了我的部分问题。因为我可以在一个数据库里把各个业务组分开。但是,在同一业务集团内,可能有多个业务部门。我将以麦当劳为例,它是业务组,每个商店都是单位。为了解决这个问题,我想到了创建一个新的租户机制,这次,在数据库中用 tenant_id 分隔。

在那种情况下,我想从最有经验的人那里知道这是否是正确的方法?

出现的另一个问题是同一业务组中的用户访问多个业务单元。在这种情况下,如何允许这种访问而不必为每个业务单元重新注册?

我希望我已经清楚地解释了这个问题。如果您需要更多信息,请告诉我。

欢迎任何帮助。

提前感谢所有读到这里的人。

对于这个问题,你将不得不bring-in租户层次结构的概念,例如

McDonald (Main Tenant)
    McDonald Seattle
    McDonald Oregon
    McDonald Newyork

通过这种方式,您可以让父租户包含所有业务用户,然后为他们分配对相应子租户的访问权限。如果您有一个用户在多个租户中工作,允许用户设置租户上下文 post 登录到根租户。这有助于您识别上下文租户并相应地加载数据。

有很多use-cases子租户可以拥有自己的用户。这也可能伴随着这样的问题,比如我可以将用户从子租户提升为父租户,比如可以管理连锁餐厅的区域经理。

登录后,您可以检查用户是否登录了单个租户(在层级 [parent / tenant] 中),在这种情况下,您可以允许直接登录,否则提示租户上下文设置页面将他路由到相应的租户。

在 ACL 的情况下,我们可能必须按租户分配角色和权限(通过 tenantId 列就足够了)这有助于用户在一个子租户 (McDonald Seattle) 中扮演经理角色和销售员角色在 (McDonald Newyork) 个租户中。

比如我可以有下面这个模型。这将在选择租户时设置,从那时起,我将能够使用权限/角色从此上下文进行验证,这样就不会再进行数据库调用等。这可以在 UI 和同样在 REST API 层中(在 REST API 层中,我们对用户进行身份验证的地方可以设置它并让 API、Services、BusinessRules 层使用它作为源真相比击中数据库)

class UserContext {
    String userName,
    Guid Id,
    Guid TenantId,
    Roles[] TenantRoles,
    String[] Permissions
}