问题描述
请告诉我如何在 1 条路线上使用 2 个角色。我正在使用 Laravel 权限。
路线
Route::group(['middleware' => ['role:user_сitisen']],function () {
Route::get('/addcitisens',[App\Http\Controllers\CitisenControl::class,'index']);
Route::get('/citisen/{id}','show']);
Route::post('/citisen/{id}','update'])->name('citisen');
Route::get('/destroy/{id}','destroy']);
Route::post('/citisens','store']);
Route::get('/citisens/export','CitisenExport']);
});
Route::group(['middleware' => ['role:user_avto']],function () {
Route::get('/avtoslist',[App\Http\Controllers\AvtosController::class,'index']);
Route::get('/addavtos','indexAdd']);
Route::post('/avtos','store']);
});
Route::group(['middleware' => ['role:admin']],'CitisenExport']);
Route::get('/avtoslist','store']);
Route::get('/usersList',[App\Http\Controllers\UsersController::class,'index'])->name('usersList');
Route::get('/addusers','indexUser']);
Route::post('/users','store']);
Route::get('/users/{id}','show']);
Route::post('/users/{id}','update']);
Route::get('/destroyuser/{id}','destroy']);
});
解决方法
作为文档says
您可以用 | 分隔多个角色或权限(管道)字符:
Route::group(['middleware' => ['role:super-admin|writer']],function () {
//
});
,
在您的中间件中应用该逻辑。
public function handle($request,Closure $next,... $roles)
{
if (!Auth::check()) // I included this check because you have it,but it really should be part of your 'auth' middleware,most likely added as part of a route group.
return redirect('login');
$user = Auth::user();
if($user->isAdmin())
return $next($request);
foreach($roles as $role) {
// Check if user has the role This check will depend on how your roles are set up
if($user->hasRole($role))
return $next($request);
}
return redirect('login');
}
,
是的,但您也可以在中间件中进行更改。
Route::group(['middleware' => ['auth','web','roles'],'roles'=>['admin','driver']],function() {
});
,
用 |
分隔。
Route::group(['middleware'=>['role:admin|user']],function(){
来源:https://spatie.be/docs/laravel-permission/v4/basic-usage/middleware
引用:Alternatively,you can separate multiple roles or permission with a | (pipe) character: