2013-08-05 32 views
0

我创建了自己的过滤器和视图作曲家。这里首先是代码:Laravel 4过滤器和视图作曲家

我的管理员过滤器:

Route::filter('admin', function() 
{ 
    if (Auth::check()) 
    { 
     $roles = Auth::user()->role; 

     if ($roles == '5') 
     { 
      return Redirect::to('news/index')->with('roles', $roles); 
     } 
    } 
    else 
    { 
     return View::make('errors.401'); 
    } 
}); 

和我的View Composer(它在global.php):

// View composer 
View::composer(array('common.menu_addition','common.base_errors'), function($view) 
{ 
    if (Auth::check()) 
    { 
     $roles = Auth::user()->type; 
     if ($roles == '5') 
     { 
      $view->with('roles', $roles); 
     } 
     else 
     { 
      $view; 
     } 
    } 
    else 
    { 
     return Redirect::to('news/index'); 
    } 
}); 

所以这是行不通的。我想用我的管理员帐户访问一些页面(角色等于5,数据库中的'角色'列)。我在我的路线中创建了一个组,但是当我尝试访问一个页面时,它会将我重定向到我的新闻/索引页面。

我该如何设置它使任何页面需要管理角色可见?

我还使用Jeffrey Way的发生器制作脚手架,如果有帮助的话。

回答

2

我在应用程序中做了一些非常类似的事情,但经过一些反复试验和错误,我认为验证用户和管理员的最佳方法是使用两个单独的过滤器。所以,这里是我做的:

我有一个auth过滤器,只需登录一个用户 -

Route::filter('auth', function() { 
    if (Auth::guest()) return Redirect::to('login'); 
}); 

除了这个,我有一个auth.admin过滤器会检查用户角色登录:

Route::filter('auth.admin', function() { 
    if(Auth::user()->userprofile->security_level < 4) { 
     return Redirect::route('projects.home'); 
    } 
}); 

一个需要注意的是要记住,不使用auth.admin过滤器,独立的,在你的路线。将抛出时,在没有登录用户的错误你可以这样做:

Route::group(array('before' => 'auth'), function() { 
    Route::get('user', array('as' => 'user.home', 'uses' => '[email protected]'));}); 
} 

Route::group(array('before' => 'auth|auth.admin'), function() { 
    Route::get('user/create', array('as' => 'user.create', 'uses' => '[email protected]')); 
}); 

采用这种设置,添加你只想让管理员访问后者路由组authauth.admin页面。

现在,使用此设置,您不需要检查作曲家的逻辑。理想情况下,您的路由(或您的控制器,基于您的参数)应该处理您的路由逻辑。

你可以重写你的作曲是这样的:

View::composer(array('common.menu_addition','common.base_errors'), function($view) { 

    // get all categories using the category model 
    $categories = Category::all(); 
    $view->with('categories', $categories); 

}); 

作曲家被用来传递同一组数据或执行同一组任务的一组的意见。

我相信这会把你排除在外;)