laravel - 如何为用户类型正确分配带有中间件的路由?拉拉维尔
问题描述
在我的项目中,我有 4 种用户类型超级管理员、管理员、主管和用户。超级管理员和管理员可以看到相同的页面和所有相同的路由,它们之间的区别在控制器中是可以区分的,主管只有6条路由或超级管理员的一半左右,用户只看到仪表板。
现在我正在尝试在 web.php 中设置路由,但是超级管理员、管理员工作而不是主管,或者主管路由工作而其他两个没有。我究竟做错了什么?
中间件超级管理员
public function handle($request, Closure $next)
{
$user = Auth::user();
if (auth()->check() && $user->isSuperAdmin()) {
return $next($request);
}
return redirect('/');
}
中间件管理员
public function handle($request, Closure $next)
{
$user = Auth::user();
if (auth()->check() && $user->isAdmin() || $user->isSuperAdmin()) {
return $next($request);
}
return redirect('/');
}
中间件总监
public function handle($request, Closure $next)
{
$user = Auth::user();
if (auth()->check() && $user->isDirector()) {
return $next($request);
}
return redirect('/');
}
在 web.php
//Auth and login routes
Route::group(['middleware' => 'auth'], function () {
Route::resource('/', 'DashController');
Route::get('/logout')->name('logout')->uses('Auth\LoginController@logout');
Route::group(['middleware' => 'App\Http\Middleware\AdminMiddleware'], function () {
//All the routes are in this group
});
Route::group(['middleware' => 'App\Http\Middleware\DirectorMiddleware'], function () {
//Corresponding routes for director here
});
});
在我的 Kernel.php
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
'super' => \App\Http\Middleware\SuperAdminMiddleware::class,
'director' => \App\Http\Middleware\DirectorMiddleware::class,
//other default ones
];
我做错了什么,让所有这些都工作而不是一次只一组工作的正确方法是什么?
解决方案
推荐阅读
- service-worker - 在谷歌浏览器中以“隐身模式”浏览网站时,如何解决服务人员中的“未捕获(承诺)DOMException:配额超出”错误
- c++ - Poco::Zip 集扩展列表
- sql - 需要查询更正
- jpa - QueryDSL isNotNull() 的 SQL 等价物
- c++ - 使用 C++11 时列表中的编译错误
- excel - 如果单元格包含特定文本,则将单元格从一张纸复制到另一张纸
- jenkins - 詹金斯不允许保存配置
- javascript - 画布在我的网站上以错误的方式绘制
- c# - 如何在鼠标单击时选择 TextBox 的所有文本?(TextBox.SelectAll() 不适用于 TextBox.Enter)
- reactjs - TypeError:无法读取未定义的属性“位图”