首页 > 解决方案 > 如何在 Laravel 5.8s 内置身份验证中验证用户角色?

问题描述

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

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

我找到了替换整个 LaravelLogin Controller并用我们自己的替换 Authenticate Users trait 的方法。我想用最少的代码更改来解决我的问题。可能吗?

如何在此 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);
}

标签: laravelloginlaravel-5.8laravel-authentication

解决方案


你可以做一些超级简单的事情,比如在 User 模型中添加一个 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 ...
});

推荐阅读