【问题标题】:Laravel - Multi company scopesLaravel - 多公司范围
【发布时间】: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 在下面提到的内容结合起来,并使用中间件/守卫来允许只有属于公司的人员才能访问公司视图,并使用权限来检查他们可以执行的操作跨度>

标签: php laravel


【解决方案1】:

来自文档

除了提供开箱即用的身份验证服务外, Laravel 还提供了一种简单的方法来授权用户对 给定的资源。与身份验证一样,Laravel 的方法 授权很简单,主要有两种授权方式 行动:大门和政策。

Laravel 有 2 个概念,称为 Gates 和 Policies,我们可以将其注入模型(特别是 Gates),因此当模型调用查询时,Gates 会确保用户具有适当的权限。

您可以阅读更多here

【讨论】:

    【解决方案2】:

    要验证不同类型的用户并保护特定类型可以访问的路由组,您可以使用guards,要授权CRUD 操作,您可以使用FormRequest,我认为您在这两个链接下拥有所需的一切,当然您需要阅读这些内容,这是一个很好的起点。至于表,你可以有这些:

    用户、角色、公司、user_role、user_company

    和模型:

    用户、角色、公司

    【讨论】:

    • 我阅读了更多关于它的内容,这似乎是完美的解决方案。特别是在我的情况下,FormRequest 通过它的授权让生活变得更加轻松。会接受你的回答!
    猜你喜欢
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多