Search code examples
laravellaravel-authenticationlaravel-permission

How do I check User Role before Logging in A user with Spatie's Laravel-Permission?


I'm using Spatie's "Laravel Permission" Package for the ACL. Everything is working perfectly. I now want to allow only the User roles 2 and 3 to Login.

Previously, before using "Laravel Permission" package I had only this "role" column on my table and I could easily Log In a user with this line of code on Login Controller's credentials method.

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';

How do I allow Login only for the 2 and 3 User Roles?


Solution

  • You could go with the workaround as follow:

    If you're using the default LoginController from the App\Http\Controllers\Auth folder, then override its attemptLogin() method that comes from the Trait used.

        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() method comes from the HasRoles trait used for the User model.