【问题标题】:Laravel 5.1 index & create authorizationLaravel 5.1 索引和创建授权
【发布时间】:2016-02-18 03:39:44
【问题描述】:

我正在使用 Laravel 5.1 的授权功能,记录在 here。我的控制器实现了 AuthorizesRequests,并且我的策略设置了将策略连接到他们的模型以创建各种 ACL。在我的控制器中,我正在检查每种方法的授权。例如,在 'AgencyController' 中,'update' 方法调用 $this->authorize($agency),然后检查我的 AgencyPolicy 的更新方法以了解是否允许当前用户更新代理,正如在文档。这按我想要的方式工作。

但是,我似乎无法弄清楚如何在没有使用特定模型的情况下对 index() 和 create() 等其他方法使用授权。调用 $this->authorize('index') 似乎返回 false,即使我的策略类中有一个 index($user) 函数只返回 true。

我不熟悉使用 Laravel 的授权助手,所以我可能会遇到这个错误或遗漏一些明显的东西。任何为我指明正确方向的帮助将不胜感激!

【问题讨论】:

    标签: laravel laravel-5 laravel-5.1


    【解决方案1】:

    您必须将您正在检查的模型的类名传递给它:

    $this->authorize('index', Agency::class);
    

    【讨论】:

      【解决方案2】:

      在 Laravel 松弛组中的某个人的帮助下,我自己找到了这个问题的答案。

      没有模型实例,authorize() 调用无法映射到正确的策略。但是只需将类传递给他们,它就可以并且可以工作。

      例如,我不是在控制器的 index 方法中调用 $this->authorize('index'),而是调用 $this->authorize('index', Agency::class) 来给它正确的使用的模型。

      【讨论】:

      • 无需创建Agency 的新实例。看我的回答。
      • 是的,但不知何故,这个答案只是你问题的一部分。回答的部分是语法,但你如何在你的控制器和策略中处理这个? index 方法应该得到一个像$agencies = Agency::get(); 这样的集合然后你有一个集合而不是一个模型。您是否循环并授权每个?没有任何模型的创建呢?
      • 其实我理解错了。我需要的是一个查询范围,授权应该只检查一般用户是否被允许使用此方法。因此,在我的情况下,接受的答案也是正确的。
      猜你喜欢
      • 2016-03-24
      • 2016-06-20
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多