如何在内置身份验证的Laravel 5.8s上验证用户角色?

时间:2019-06-16 06:42:39

标签: laravel login laravel-5.8 laravel-authentication

我的用户表上有一个用户角色列。

  • 代表超级管理员,
  • 代表其他用户

我检查了很多Laravel教程,但没有一个对解决这个问题有帮助。

我找到了一些方法,例如替换整个Laravel的Login Controller并用我们自己的替换Authenticate Users特性。我想用最少的代码更改来解决我的问题。可能吗?

如何在此Trait方法中以最少的代码更改实现它?

public function login(Request $request)
{
    $this->validateLogin($request);


    if (method_exists($this, 'hasTooManyLoginAttempts') &&
        $this->hasTooManyLoginAttempts($request)) {
        $this->fireLockoutEvent($request);

        return $this->sendLockoutResponse($request);
    }

    if ($this->attemptLogin($request)) {
        return $this->sendLoginResponse($request);
    }


    $this->incrementLoginAttempts($request);

    return $this->sendFailedLoginResponse($request);
}

2 个答案:

答案 0 :(得分:1)

您可以像在用户模型中添加isSuperAdmin函数一样简单。登录后,只要需要检查就可以在用户上调用此功能。

在User.php模型中

  public function isSuperAdmin()
  {
      return $this->user_role == 1;
  }

然后,您还可以制作使用此功能的中间件。

php artisan make:middleware SuperAdmin

在此中间件( app / http / middleware / SuperAdmin.php )的句柄功能中:

public function handle($request, Closure $next)
{
    if (Auth::check() && Auth::user()->isSuperAdmin()) {
        return $next($request);
    }
    return redirect('some-route-for-unauthorized-users');

}

然后在您的路由中(可能是web.php),您可以使用此中间件来保护路由:

Route::group(['middleware' => ['auth', 'superadmin']], function () {
    ... put protected routes here ...
});

答案 1 :(得分:0)

解决方案

        /**
         * Create a new controller instance.
         *
         * @return void
         */
        public function __construct() {
            $this->middleware('guest')->except('logout');
        }

        protected function credentials(Request $request)
        {
            $credentials = $request->only($this->username(), 'password');
            $credentials['role'] = '1';
            return $credentials;
        }