Laravel管理员使用过滤器之前和之后的访问级别登录?

时间:2015-12-02 10:54:01

标签: php laravel

所以我必须有一个登录界面,登录后我必须决定哪个管理界面可供用户使用。

所以我为此设置路由,在可以访问管理页面之前,他们需要登录,在他们登录后,他们被重定向到相应的管理页面:

Route::get('admin', array('before' => 'auth', 'after' => 'access_lvl'));
Route::get('admin1', array('before' => 'auth', 'as'=>"admin1", 'uses' => 'admin1@index'));
Route::get('admin2', array('before' => 'auth', 'as'=>"admin2", 'uses' => 'admin2@index'));
Route::get('admin3', array('before' => 'auth', 'as'=>"admin3", 'uses' => 'admin3@index'));

这是access_lvl过滤器:

Route::filter('access_lvl',function(){
  $access_lvl=Auth::user()->access_lvl;
  var_dump($access_lvl);
  switch($access_lvl){
    case 1: return Redirect::to('admin1/'); break;
    case 2: return Redirect::to('admin2/'); break;
    case 3: return Redirect::to('admin3/'); break;
    default: return Redirect::to('admin3/'); break;
  };
});

不幸的是,我试图在chrome中Auth::user()->access_lvl;获取非对象错误的属性,并且在firefox中只有int(1)响应没有错误。你能帮我解决这个问题吗?我哪里弄错了?这是在逻辑正确之后吗?或者我应该在其他地方添加后过滤器吗?

我认为我也在使用Laravel3。我刚刚完成了这个项目,我必须继续这样做。

2 个答案:

答案 0 :(得分:0)

所以我有一个解决方案:

如果auth为真,login过滤器会将您重定向到Auth::guest()表面,因此它可以通过switch语句将您重定向到相应的管理页面,如下所示:

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::to('admin/login');
    $access_lvl=Auth::user()->access_lvl;
    switch($access_lvl){
      case 1: return Redirect::to('admin1/'); break;
      case 2: return Redirect::to('admin2/'); break;
      case 3: return Redirect::to('admin3/'); break;
      default: return Redirect::to('admin3/'); break;
    };
});

这意味着您不必拥有单独的access_lvl过滤器

虽然这是一个解决方案,但我仍然有疑问:

原始案例中使用after过滤器的探测是什么? 我什么时候应该使用after过滤器?

答案 1 :(得分:-1)

您应该使用Laravel Middleware

这是如何避免路线中的switch() {case:}