Laravel |根据用户角色限制登录

Laravel | Restrict login based on user role

所以在我们的 Laravel 应用程序中有 2 个角色(互联网客户端和管理员)。下面是数据库模式

users(id, username, password)
roles(id, name)
role_user (user_id, role_id)

我们希望允许 www.site.com/login 路由仅记录具有角色 'Client'.

的用户

请注意,我们不想在用户登录后检查角色并强制注销。

谢谢

好的,我们找到的快速解决方案是覆盖 LoginController 中的 login 函数,以检查用户名是否具有管理员角色,然后登录失败

public function login(Request $request)
    {
        $unAuthorizedRoles = ['ADMIN'];
        $exist = User::where('username', $request->username)->whereHas('roles', static function ($query) use ($unAuthorizedRoles) {
            return $query->whereIn('name', $unAuthorizedRoles);
        })->exists();

        if ($exist)
            return $this->sendFailedLoginResponse($request);

        [...]

    }