我自己创建了一个过滤器和一个View作曲家。首先,这里是代码:
我的管理员过滤器:
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');
}
});
和我的视图作曲家(它在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的发电机来制作脚手架。
答案 0 :(得分: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' => 'UsersController@index'));});
}
Route::group(array('before' => 'auth|auth.admin'), function() {
Route::get('user/create', array('as' => 'user.create', 'uses' => 'UsersController@create'));
});
使用此设置,添加您只希望管理员使用auth
和auth.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 );
});
作曲家用于传递同一组数据或为一组视图执行相同的任务集。
我相信这会让你感到厌烦;)