laravel - 如何在 Laravel 5.8s 内置身份验证中验证用户角色?
问题描述
我的用户表上有一个用户角色列。
- 代表超级管理员,
- 代表其他用户
我检查了很多 Laravel 教程,但都没有帮助我解决这个问题。
我找到了替换整个 LaravelLogin Controller
并用我们自己的替换 Authenticate Users trait 的方法。我想用最少的代码更改来解决我的问题。可能吗?
如何在此 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);
}
解决方案
你可以做一些超级简单的事情,比如在 User 模型中添加一个 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 ...
});
推荐阅读
- java - 如何将数组添加到 JSON 中?
- authentication - 用户可以修改索赔中可用的信息吗?
- python - 如何从 scikit-learn 中的 TransformedTargetRegressor 管道中的经过训练的估计器访问属性?
- amazon-web-services - 在源代码控制中包含 aws-exports.js 文件是否错误/危险?
- flutter - 您上传的 APK 使用与之前的 APK 不同的证书进行签名。您必须使用相同的证书
- powershell - 我可以使用 Powershell 中的 New-NavContainer 在 Azure 中托管容器吗?
- android - 如何使用 Cloud Firestore 在 Android/Kotlin 中执行“点赞”功能?
- react-native - 反应本机键盘避免视图
- regex - 如何将 APA 中的引用编码为 excel 中的引用?
- html - Google 登录网站检测用户帐户并显示在 iframe/popup 中