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?

Larave中CSRF攻击

我想自学laraver,请诸位前辈给一些建议,谢谢

Laravel 5.1 如何使用迁移创建 MySQL 存储过程

44 mysql索引

Laravel 5.1 UrlGenerator 路由未定义错误