我一直在使用Laravel的中间件遇到了一些问题。让我告诉你我尝试实现的基本思路:
网站上的注册用户将有四种角色之一:
- 学生 (默认):可以访问 'index'和'show'视图
- 审核员:可以访问前面的内容,还可以访问 'overview', 'update'
- 编辑:可以访问前面的内容,还可以访问 'create', 'edit' 和 'store'
- 管理员:可以访问所有内容
提示:'overview'是一种索引视图,但仅适用于审核员及以上角色。
你们认为最好的方法是什么?这是我迄今为止所做的,但似乎不起作用:
Kernel.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');
}
'User'是Eloquent模型:
public function isAdmin()
{
if($this->role_id === 4)
{
return true;
}
else
{
return false;
}
}
在审批者和编辑者中间件文件中,以及用户模型中的isApprover和isEditor函数中,我已经做了完全相同的操作,只是将if语句中的checked值分别编辑为2和3。
最后,这是我在routes\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');
虽然还不是完全精准,但我现在卡住了,因为当我以具有批准者权限的用户身份登录并尝试访问学校概览时,它会将我重定向回主页。
总的来说,感觉我工作过于混乱,一切都不对头,能否有人给我提供如何更高效地完成工作的建议呢?
非常感谢您提前的帮助!