0

我的Laravel 4应用程序中有一堆分组的资源控制器,如下所示:

Route::group(array('before'=>'auth'), function() {
    Route::resource('groups', 'GroupController');
    Route::resource('users', 'UserController');
});

上面提到的两个是在Cartalysts Sentry 2包的帮助下实现的用于管理用户和组的控制器。

现在我想要一个过滤器来检查当前 Sentry 用户是否有权调用控制器操作。由于过滤器包裹在路由组周围,我不知道封闭的路由会导致什么控制器或操作。据我所知,过滤器是设置在BaseController 方法中filters.php还是设置在 BaseControllerbeforeFilter()方法中没有区别,因为问题是我不知道如何确定路由最终通向何处。

是否可以确定将在(基本)控制器beforeFilter()方法中调用的控制器操作?

4

1 回答 1

1

我在LaravelgetActionName()Route类中找到了返回要执行的动作的方法(以 的形式,就像控制器路由一样)。所以我把它用在一个过滤器中,根据 Sentry 用户权限检查它。如果用户无权访问,它将呈现错误视图。UserController@create

routes.php(将perm过滤器添加到分组的死记):

Route::group(array('before'=>'auth|perm'), function() {

过滤器.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);
        }
    }
});
于 2014-01-28T14:01:14.017 回答