中的示例中所示
我可以检查Laravel 5.4路线组中提到的中间件之一吗?如果条件满足任何中间件的条件,即user
,manager
或admin
例如:
Route::group(['middleware' => ['user'|'manager'|'admin']], function () {
//
}
也许您可以尝试仅尝试使用一个中间件来完成所有这些角色。您可以在此中间件中使用一个参数,如Laravel文档中所示
在这里和那里徘徊后,我决定创建一个新的中间件,该中间件匹配所有中间件user
,manager
和admin
是的,您可以做到。
为此public function handle(Request $request, Closure $next, $roles)
{
try {
$roles = explode(',', $roles);
/**
* Role is a user level. Check User Model, on level, has a full description of the roles.
*/
$user = Auth::user();
if (!in_array($user->level, $roles)) {
return response()->json(['message' => 'Access Denied'], 403);
}
return $next($request);
} catch (Throwable $e) {
Log::channel('middlewares')->error("Erro middleware Roles", [
'roles' => $roles,
'request_data' => $request->all(),
'error' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
]);
return response()->json(['message' => 'Error'], 403);
}
}
用法:
Route::middleware(['roles:1,2'])->prefix('stores')->controller(AdminStoresController::class)->group(function () {
Route::get('/', 'index');
Route::post('/', 'store');
Route::put('/{id}', 'update');
Route::delete('/{id}', 'delete');
});