Laravel 5.1指数和;创建授权

Laravel 5.1指数和;创建授权,laravel,laravel-5,laravel-5.1,Laravel,Laravel 5,Laravel 5.1,我正在使用Laravel 5.1的授权功能,有文档记录。我的控制器实现授权请求,我的策略设置将策略连接到它们的模型,以创建各种ACL。在我的控制器中,我检查每个方法中的授权。例如,在“AgencyController”中,“update”方法调用$this->authorize($agency),然后检查我的AgencyPolicy的update方法,以确定是否允许当前用户更新代理,如文档中所述。这是我想要的方式 然而,我似乎不明白的是,在没有使用特定模型的情况下,如何对其他方法(如index(

我正在使用Laravel 5.1的授权功能,有文档记录。我的控制器实现授权请求,我的策略设置将策略连接到它们的模型,以创建各种ACL。在我的控制器中,我检查每个方法中的授权。例如,在“AgencyController”中,“update”方法调用$this->authorize($agency),然后检查我的AgencyPolicy的update方法,以确定是否允许当前用户更新代理,如文档中所述。这是我想要的方式

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


我对使用Laravel的授权助手还不熟悉,所以我可能在这方面做得不对,或者遗漏了一些明显的东西。任何能为我指明正确方向的帮助都将不胜感激

在Laravel slack小组的帮助下,我自己找到了答案

没有模型实例,authorize()调用无法映射到正确的策略。但是,通过简单地将类传递给他们,它就能够实现和工作


例如,我现在调用$this->authorize('index'),而不是在我的控制器的index方法中调用$this->authorize('index',Agency::class),为其提供正确的模型以供使用。

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

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

无需创建代理机构的新实例。看我的答案。是的,但不知怎么的,这个答案只是你问题的一部分。回答的部分是语法,但是在控制器和策略中如何处理这个问题?index方法应该得到一个集合,如
$agents=Agency::get()然后您拥有一个集合而不是一个模型。你是否循环并授权每个人?在你没有任何模型的地方创建呢?事实上我理解错了。我需要的是一个查询范围,授权应该只是检查用户是否被允许使用这个方法。因此,在我的情况下,公认的答案也是正确的。