检查Laravel 5是否存在许多中间Wares之一



我可以检查Laravel 5.4路线组中提到的中间件之一吗?如果条件满足任何中间件的条件,即usermanageradmin

例如:

Route::group(['middleware' => ['user'|'manager'|'admin']], function () {
//
}

也许您可以尝试仅尝试使用一个中间件来完成所有这些角色。您可以在此中间件中使用一个参数,如Laravel文档中所示

中的示例中所示

在这里和那里徘徊后,我决定创建一个新的中间件,该中间件匹配所有中间件usermanageradmin

是的,您可以做到。

为此
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');
});

最新更新