Laravel Auth仅验证管理员/超级用户

时间:2015-04-24 08:42:06

标签: php laravel authorization laravel-5

我在Windows开发机器上使用Laravel 5。我想在整个应用程序中自定义和使用 Auth 中间件,以维护身份验证。 我的用例是标准用例。有两类(或三类)用户 - 管理员常规(常规用户不是管理员)。

管理员具有明显的后端管理角色,因此有一个单独的路由组 / admin / ,它应该将未登录的用户重定向到 / admin / login 。我已经这样设置了..

Route::group(['middleware'=>'auth', 'prefix' => 'admin'], function() {
  Route::get('login','App\AuthController@getLogin');
  Route::post('login','App\AuthController@postLogin');
});

发布登录表单后,如何让Auth 添加过滤器

  • 要么从那些'is_admin'为真的用户中验证
  • 或要求它首先加入用户和UserRoles表以仅识别具有管理员角色的用户?

2 个答案:

答案 0 :(得分:5)

我建议您定义另一个中间件来检测用户是否为admin而不是修改auth。现在将另一个中间件添加到只有管理员可以访问的路由中。

添加几个像这样的路由中间件

Route::group(['middleware' => ['auth','admin']], function() {

中间件看起来像

public function handle($request, Closure $next) {
  if (Auth::user()->role == "admin") {
    return $next($request);
  } else {
    return redirect("/")->withMyerror("You are not authorized for this action");
  }
}

答案 1 :(得分:0)

为什么不代替处理Auth过滤器并尝试"验证"只有在某种情况下,在您的登录代码中,只需检查用户的类型是什么?

这是我的高级代码:

        // get roles which are allowed to login to the admin panel
        $roles = $this->userService->adminRoles(); 

        $user = User::whereUsername(Input::get('username'))->whereIn('role_id', $roles)->first();

        if (is_null($user)) {
            // ...
        }

        // create our user data for the authentication
        $userdata = array(
            'username' => Input::get('username'),
            'password' => Input::get('password'),
        );

        // attempt to do the login
        // Auth::attempt($userdata) ....

这样,您只能在尝试登录时执行一次这样的操作吗?