我的 Laravel 4 应用程序中有一堆分组资源控制器,如下所示:
Route::group(array('before'=>'auth'), function() {
Route::resource('groups', 'GroupController');
Route::resource('users', 'UserController');
});
上面提到的两个是用于管理在 Cartalysts Sentry 2 包的帮助下实现的用户和组的控制器。
现在我想要一个过滤器,它会检查当前Sentry用户是否有权调用控制器操作。由于过滤器围绕着一组路线,我无法知道封闭路线所导致的控制器或动作。据我所知,过滤器是在filters.php
还是在BaseController beforeFilter()
方法中设置没有区别,因为问题是我不知道如何确定路由最终导致
是否可以确定将在(基本)控制器beforeFilter()
方法中调用的控制器操作?
答案 0 :(得分:1)
我在 Laravel 的getActionName()
类中找到方法Route
,它返回要执行的操作(以UserController@create
的形式,就像一个控制器路线)。所以我把它用在过滤器中,在过滤器中根据Sentry用户权限进行检查。如果用户无权访问,则会呈现错误视图。
routes.php(将perm
过滤器添加到分组的rotes中):
Route::group(array('before'=>'auth|perm'), function() {
filters.php:
Route::filter('perm', function($route, $request) {
$user = Sentry::getUser();
if ($user)
{
if ($user->hasAccess($route->getActionName()) == false)
{
return Response::view('errors.forbidden', array(), 403);
}
}
});