具有多个角色的 Laravel 中间件
2022-08-30 14:44:39
我在使用Laravel的中间件时遇到了一些问题。让我告诉你我试图完成的基本思想:
站点上的注册用户将具有以下四个角色之一:
- 学生(默认):可以访问“索引”和“显示”视图
- 审批者:可以访问上一个,以及“概述”、“更新”'
- 编辑器:可以访问上一个,加上“创建”,“编辑”和“商店”'
- 管理员:可以访问所有内容
fyi:“概述”是一种索引视图,但仅适用于审批者角色及更高
你们会建议最好的方法来做到这一点吗?这是我到目前为止所做的,但它似乎不起作用:
内核.php
protected $middlewareGroups = [
...
'approver+' => [
\App\Http\Middleware\Approver::class,
\App\Http\Middleware\Editor::class,
\App\Http\Middleware\Admin::class,
],
];
protected $routeMiddleware = [
...
'student' => \App\Http\Middleware\Student::class,
'approver' => \App\Http\Middleware\Approver::class,
'editor' => \App\Http\Middleware\Editor::class,
'admin' => \App\Http\Middleware\Admin::class,
];
http\middleware\admin.php
public function handle($request, Closure $next)
{
if (Auth::check())
{
if(Auth::user()->isAdmin())
{
return $next($request);
}
}
return redirect('login');
}
“用户”雄辩模型:
public function isAdmin()
{
if($this->role_id === 4)
{
return true;
}
else
{
return false;
}
}
我在审批者和编辑器中间件文件中做了完全相同的操作,在用户模型中的 isApprover 和 isEditor 函数中,仅将 if 语句中的选中值分别编辑为 2 和 3。
最后,以下是我在路由\web 文件中执行的操作:
Route::get('scholen', 'SchoolsController@index');
Route::get('admin/scholen/overzicht', 'SchoolsController@overview')->middleware('approver+');
Route::get('admin/scholen/maken', 'SchoolsController@create')->middleware('approver+');
Route::post('scholen', 'SchoolsController@store')->middleware('approver+');
Route::get('scholen/{id}', 'SchoolsController@show');
Route::get('admin/scholen/{id}/bewerken', 'SchoolsController@edit')->middleware('admin');
Route::patch('admin/scholen/{id}', 'SchoolsController@update')->middleware('admin');
Route::delete('admin/scholen/{id}', 'SchoolsController@destroy')->middleware('admin');
这还不完全正确,但我卡住了,因为当我以具有审批者权限的用户身份登录并尝试访问学校概述时,它会将我重定向回主页。
总的来说,我只是觉得我工作得太混乱了,根本不对劲,有人可以给我一些关于如何更有效地做到这一点的建议吗?
非常感谢你提前!