如何根据请求的控制器操作过滤laravel中的分组路径?

时间:2014-01-28 07:33:34

标签: php laravel filter laravel-routing cartalyst-sentry

我的 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()方法中调用的控制器操作?

1 个答案:

答案 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);
        }
    }
});