如何在使用 Spatie 的 Laravel-Permission 登录用户之前检查用户角色?
How do I check User Role before Logging in A user with Spatie's Laravel-Permission?
我正在为 ACL 使用 Spatie 的 "Laravel Permission" 包。一切都运行良好。我现在只想允许用户角色 2 和 3 登录。
以前,在使用 "Laravel Permission" 包之前,我的 table 上只有这个 "role" 列,我可以使用登录控制器的凭据方法上的这行代码轻松登录用户.
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 用户角色登录?
您可以采用以下解决方法:
如果您使用 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
特征。
或者您可以在登录期间覆盖 Laravel 凭据。在 App\Http\Controllers\Auth
文件夹中的默认 LoginController
中,然后覆盖来自所用特征的凭据 (Request $request
) 方法。
重写它看起来类似于此
protected function credentials(Request $request)
{
return [ 'email' => $request-> { this-> username() }, 'password' -> $request -> password, 'role_id' => [ '1', '2' ] ];
这是假设您的用户模型中有一个 role_id
。为 me.return
工作
您可以覆盖 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');
}
}
我正在为 ACL 使用 Spatie 的 "Laravel Permission" 包。一切都运行良好。我现在只想允许用户角色 2 和 3 登录。
以前,在使用 "Laravel Permission" 包之前,我的 table 上只有这个 "role" 列,我可以使用登录控制器的凭据方法上的这行代码轻松登录用户.
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 用户角色登录?
您可以采用以下解决方法:
如果您使用 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
特征。
或者您可以在登录期间覆盖 Laravel 凭据。在 App\Http\Controllers\Auth
文件夹中的默认 LoginController
中,然后覆盖来自所用特征的凭据 (Request $request
) 方法。
重写它看起来类似于此
protected function credentials(Request $request)
{
return [ 'email' => $request-> { this-> username() }, 'password' -> $request -> password, 'role_id' => [ '1', '2' ] ];
这是假设您的用户模型中有一个 role_id
。为 me.return
您可以覆盖 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');
}
}