我的用户表上有一个用户角色列。
我检查了很多Laravel教程,但没有一个对解决这个问题有帮助。
我找到了一些方法,例如替换整个Laravel的Login Controller
并用我们自己的替换Authenticate Users特性。我想用最少的代码更改来解决我的问题。可能吗?
如何在此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);
}
答案 0 :(得分:1)
您可以像在用户模型中添加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 ...
});
答案 1 :(得分:0)
解决方案
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct() {
$this->middleware('guest')->except('logout');
}
protected function credentials(Request $request)
{
$credentials = $request->only($this->username(), 'password');
$credentials['role'] = '1';
return $credentials;
}