【发布时间】:2023-03-10 14:36:01
【问题描述】:
我对 Laravel 很陌生,但现在已经掌握了大部分基础知识。
目前,我构建了一个应用程序,其中多家公司各自获得一个代表其主要用户的帐户,我们称他为 CompanyAdmin。 该用户可以为此公司创建新用户,并能够查看该公司的所有报价。
新创建的用户,称为CompanyEmployee,不能创建新用户,只能查看他们自己创建的报价,以及创建新报价。
现在当然有一个超级管理员,它坐在桌子的另一边。他查看来自所有公司的所有报价,能够随心所欲地创建用户,并且可以接受/编辑报价。
我目前的做法是将 user_id 附加到所有报价并将用户附加到公司,并赋予他们一个角色。 所有逻辑都将在控制器中进行,我将在控制器中检查用户的角色,因此只读取/保存引号,用户可以进行编辑。
但是,这样做感觉很脏,而且维护起来也很费劲。如果你愿意,例如为 SuperAdmin 的员工创建另一个角色,您需要更改每个控制器。
我找不到一种方法来定义每个模型的每个角色的访问权限,所以当我调用 Quotes::all() 时,它只检索合法的(当然保存也是如此)。
请指导我使用 Laravel 功能(甚至是软件包,但我以前没有使用过)来帮助我完成工作。
期待可能导致低维护的解决方案。 最好的问候!
【问题讨论】:
-
看看基于角色的权限:github.com/Zizaco/entrust 基本上是您创建角色,然后创建权限,然后将权限分配给这些角色,然后将角色分配给用户。你可以
$user->hasRole('superadmin')或者$user->can('edit-quotes') -
谢谢!但是,重点更多地放在用户所依附的基于公司的视图上。然后在公司内部设置权限。
-
您可以将其与 Nikola Gavric 在下面提到的内容结合起来,并使用中间件/守卫来允许只有属于公司的人员才能访问公司视图,并使用权限来检查他们可以执行的操作跨度>