Laravel - 具有多个用户和分隔数据的多个帐户

时间:2018-04-17 19:37:57

标签: php laravel

我已经对此做了很多阅读,但没有什么突出的。我已经拥有一个可以处理多个警卫和用户角色的身份验证和授权系统(用户,管理员,超级管理员等)。

我试图找出将系统分成完全独立的帐户的最佳方法,这些帐户具有以下内容;

无登录栏

  • 登陆页面。任何人都可以在不登录的情况下看到。

管理员部分

  • 系统的管理员端有一个超级管理员,然后有多个管理员用户。
  • 这些用户可以查看在客户端拥有帐户的每个用户的所有数据。

客户端部分

  • 每个用户帐户都有一个处理结算的所有者,他们自己的用户管理员等。
  • 每个客户帐户还拥有许多具有不同权限的用户(管理员用户,编辑用户等)。
  • 此方的用户应该只能看到自己的帐户数据。他们不应该看到其他帐户数据。

在Laravel之前,我会有一个帐户表并为每个帐户分配一个唯一的密钥。然后,单独的用户表将包含用户及其帐户密钥。

从此时起的所有数据库表(帖子,产品,货件等)也将具有此密钥,以确保用户帐户只能看到自己的数据。

除此之外,还有权限表,用于精确控制来自任何一方的每个用户可以看到的内容。

我原来的方式仍然适合Laravel还是有更好的方法?

2 个答案:

答案 0 :(得分:3)

将帐户分成他们自己的生态系统"在同一代码库中称为多租户。基本上,您可以根据用户ID和/或角色来确定应用程序查询的范围,从而将可用数据限制为任何给定用户。

查看Landlord Package

在一个非常基本的摘要中,它的作用是为每个适用的查询添加where('tenant_id, auth()->id())子句。

当然,您可以完全省略该条款以供超级管理员访问所有数据,或者应用更严格的约束,例如通过添加对用户角色的检查以及该条款,进一步限制用户的内容可以访问各自的帐户/组织/组等。

范围界定可以通过任何类型的关系来完成,您不一定限于经过身份验证的用户ID。如果您的应用程序具有多个用户的组织,则可以使用组织ID。

多个租户ID也是可能的,其中用户必须属于该组织内的组织和某个部门。

我之前使用过的另一个软件包是Hyn's multi-tenant

答案 1 :(得分:0)

我们有您提到的相同项目。我们创建一个公司表,并将其放在层次结构的顶部。

然后将所有表的新字段添加为company_id 并通过Policy-> https://laravel.com/docs/5.8/authorization

管理模型

我希望有帮助