6

我正在尝试在 laravel 中使用路由过滤器来检查特定用户是否有权访问页面:

Route::filter('check_roles', function()
{
    $current_url = URI::current();
    $access = 0;
    $nav = Session::get('navigation');
    foreach($nav as $k => $n){
      if(in_array($current_url, $n)){
        $access = 1;
      }
    }

    if($access == 0){
     return Redirect::to('home');
    }
    //problem is if the user has access to the page a blank page is returned

});

我在这样的路线中使用它:

Route::get('admin/(:all)', array('before' => 'check_roles'));

问题是如果用户有权访问该页面,则会返回一个空白页面。如果用户有权访问,我如何继续使用默认控制器操作?

4

1 回答 1

11

替换Route::get()Route::filter('pattern: admin/*', 'check_roles');

现在,每次包含此模式的请求都会调用您的 check_roles 过滤器。我认为这是您当前需要的,而不是Route::get(),

您可以Route::get()在单个页面上使用,例如

Route::get('supersecret', array('before' => 'check_roles'), function() { return View::make('mysecret') });

更多信息路由 - 过滤器

更新以反映我对评论的建议。

您可以创建一个Admin_Controller扩展您Base_Controller的 auth 过滤器并将您的 auth 过滤器放在__construct().

class Admin_Controller extends Base_Controller {
    public function __construct()
    {
        parent::__construct();
        $this->filter('before', 'auth');
    }
}

在你的 start.php 中注册这个控制器(搜索 Autoloader,你的 base_controller 被映射到哪里)。

现在,您可以随时扩展您Admin_Controller的区域以保护您的区域。

class Pages_Controller extends Admin_Controller {
    // do cool stuff
 }

希望有帮助

于 2012-12-01T09:12:52.250 回答