Laravel 5.1 索引和创建授权
Posted
技术标签:
【中文标题】Laravel 5.1 索引和创建授权【英文标题】:Laravel 5.1 index & create authorization 【发布时间】: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 的授权助手,所以我可能会遇到这个错误或遗漏一些明显的东西。任何为我指明正确方向的帮助将不胜感激!
【问题讨论】:
【参考方案1】:您必须将您正在检查的模型的类名传递给它:
$this->authorize('index', Agency::class);
【讨论】:
【参考方案2】:在 Laravel 松弛组中的某个人的帮助下,我自己找到了这个问题的答案。
没有模型实例,authorize() 调用无法映射到正确的策略。但是只需将类传递给他们,它就可以并且可以工作。
例如,我不是在控制器的 index 方法中调用 $this->authorize('index'),而是调用 $this->authorize('index', Agency::class) 来给它正确的使用的模型。
【讨论】:
无需创建Agency
的新实例。看我的回答。
是的,但不知何故,这个答案只是你问题的一部分。回答的部分是语法,但你如何在你的控制器和策略中处理这个? index 方法应该得到一个像$agencies = Agency::get();
这样的集合然后你有一个集合而不是一个模型。您是否循环并授权每个?没有任何模型的创建呢?
其实我理解错了。我需要的是一个查询范围,授权应该只检查一般用户是否被允许使用此方法。因此,在我的情况下,接受的答案也是正确的。以上是关于Laravel 5.1 索引和创建授权的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.1:如何使用 oauth2-server-laravel?