我正在使用Laravel 5.1的授权功能,记录为here。我的控制器实现了AuthorizesRequests,我设置了我的策略,将策略连接到他们的模型,以创建各种ACL。在我的控制器中,我正在检查每种方法的授权。例如,在'AgencyController'中,'update'方法调用$ this-> authorize($ agency),然后检查我的AgencyPolicy的更新方法,以便知道当前用户是否被允许更新代理,正如所描述的那样在文档中。这按照我想要的方式工作。
但是,我似乎无法弄清楚如何在没有使用特定模型的情况下对其他方法(如index()和create())使用授权。调用$ this-> authorize('index')似乎返回false,即使我的策略类中只有一个索引($ user)函数只返回true。
我是新手使用Laravel的授权助手,所以我可能会犯这个错误或遗漏一些明显的东西。任何帮助我指向正确方向的帮助都会非常感激!
答案 0 :(得分:5)
你必须传递你正在检查的模型的类名:
$this->authorize('index', Agency::class);
答案 1 :(得分:0)
在Laravel懈怠小组的帮助下,我能够自己找到答案。
如果没有模型实例,则authorize()调用无法映射到正确的策略。但是通过简单地将课程传递给他们,它就能够并且有效。
例如,我不是在我的控制器的索引方法中调用$ this-> authorize('index'),而是现在调用$ this-> authorize('index',Agency :: class)来给它正确使用的模型。