2015-11-16 121 views
2

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

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

我是使用Laravel的授权助手的新手,所以我可能会考虑这个错误或缺少明显的东西。任何帮助指引我在正确的方向将gretaly赞赏!

回答

4

你要通过它的模型的类名,你正在检查:

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

它不适合我 –

0

在Laravel懈怠组的某个人的帮助下,我能够自己找到答案。

没有模型的实例,authorize()调用无法映射到正确的策略。但通过简单地将课程传递给他们,它就能够工作。例如,我现在调用$ this-> authorize('index',Agency :: class)给它,而不是在我的控制器的索引方法中调用$ this-> authorize('index')正确的型号使用。

+1

无需创建Agency'的'一个新的实例。看到我的答案。 –

+0

是的,但不知何故,这个答案只是你的问题的一部分。被回答的部分是语法,但是如何在您的控制器和策略中处理这个问题?索引方法应该得到像'$ agencies = Agency :: get();'那么你有一个集合而不是一个模型的集合。你循环和授权每个?如何创建你没有任何模型的地方? – hogan

+0

其实我理解错了。我需要的是一个查询范围,授权应该检查一般用户是否被允许使用这种方法。因此,我接受的答案对我来说也是正确的。 – hogan