laravel - Laravel:如果用户是管理员,将默认 laravel 用户重定向到管理页面,或者如果用户不是管理员,如何将默认用户重定向到用户页面?
问题描述
User 模型有一个 isAdmin() 函数来检查用户是否是管理员。接下来做什么?
解决方案
最佳实践是 whit 角色,您在 Routes::middleware 上添加角色,
Route::group(['middleware' => ['auth', 'roles:admin']], function () {
//Your routes
});
内核.php
'roles' => Middleware\CheckRole::class,
创建中间件
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
public function handle($request, Closure $next, ...$role)
{
if ($request->user()->hasAnyRole($role)) {
return $next($request);
}
return redirect(route('hour'));
}
}
在用户模型上创建函数
public function authorizeRole($role)
{
if ($this->hasAnyRole($role)) {
return true;
}
return abort(401, 'Unauthorized.');
}
public function hasAnyRole($roles)
{
if (is_array($roles)) {
foreach ($roles as $role) {
if ($this->hasRole($role)) {
return true;
}
}
} else {
if ($this->hasRole($roles)) {
return true;
}
}
return false;
}
public function hasRole($role)
{
if ($this->role()->where('name', $role)->first()) {
return true;
}
return false;
}
public function role()
{
return $this->belongsTo('App\Role')->withDefault();
}
和榜样
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public function user()
{
return $this->hasMany('App\User');
}
}
是更多的代码,但是这个动作的最佳方式
推荐阅读
- c++ - 加载大图像文件在 CryptoPP::FileSource 中引发异常 std::bad_alloc
- json - 如何在 python 中编写可拆分的 DoFn - 在 apache Beam 中将 json 转换为 ndjson
- jquery - 如何在 JQuery 中添加新值和答案值?
- android - Android studio web socket - 一次接收多个JSON对象时出错
- python - 如果我通常将“#”作为分隔符但部分作为标题的一部分,我该怎么做才能将 csv 文件正确导入 Python?
- sql - 在 TFDQuery“like”模式中使用方括号 [^] 中的帽子时出现问题
- asp.net-mvc - 如何从 AspNetCore 中的 linq 查询中读取值?
- node.js - 对猫鼬中获取的每条记录执行另一个查询?
- android - “运行应用程序”快捷方式随机无法安装 + 运行 android 应用程序(android studio)
- c++ - 将变量 B 和 C 的乘积归因于变量 A