登录具有Spatie的Laravel-Permission的用户之前,如何检查用户角色?

时间:2019-06-24 13:45:14

标签: laravel spatie laravel-authentication

我将Spatie的“ Laravel Permission”软件包用于ACL。一切工作正常。我现在只想允许用户角色2和3登录。

以前,在使用“ Laravel Permission”软件包之前,我的表上只有该“ role”列,并且可以通过Login Controller的凭据方法使用此行代码轻松登录用户。

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

如何仅允许2个和3个用户角色登录?

3 个答案:

答案 0 :(得分:0)

您可以按照以下方法进行解决:

如果您使用的是 App \ Http \ Controllers \ Auth 文件夹中的默认 LoginController ,请覆盖它的 attemptLogin()方法来自使用的特质。

    protected function attemptLogin(Request $request)
    {
        if( $this->guard()->attempt(
            $this->credentials($request), $request->filled('remember')
        ) ) { // Credential auth was successful
            // Get user model
            $user = Auth::user();
            return $user->hasRole([2, 3]); // Check if user has role ids 2 or 3
        }

        return false;
    }

hasRoles()方法来自用于 User 模型的 HasRoles 特性。

希望这会有所帮助。

答案 1 :(得分:0)

或者您可以在登录期间覆盖Laravel凭据。在LoginController文件夹的默认App\Http\Controllers\Auth中,然后覆盖所使用的Trait的凭据(Request $request)方法。

将其覆盖以类似于此外观

protected function credentials(Request $request)
{

 return [ 'email' => $request-> { this-> username() }, 'password' -> $request -> password, 'role_id'  => [ '1', '2' ] ];

这假定您的用户模型中有一个role_id。为我工作。返回

答案 2 :(得分:0)

您可以在LoginController中重写authenticated()并检查用户角色。很简单

protected function authenticated(Request $request, $user)
{
    //Check user role, if it is not admin then logout
    if(!$user->hasRole(['Admin', 'Super-Admin']))
    {
        $this->guard()->logout();
        $request->session()->invalidate();
        return redirect('/login')->withErrors('You are unauthorized to login');
    }
}