php 检查是否有中间件存在laravel 5

m528fe3b  于 2023-03-28  发布在  PHP
关注(0)|答案(3)|浏览(131)

我可以检查Laravel 5.4路由组中是否存在上述中间件之一吗?如果满足任何中间件的条件,即usermanageradmin,则继续
例如:

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

jtoj6r0c1#

也许你可以尝试只使用一个中间件来处理所有这些角色,你可以在这个中间件中使用一个参数,如Laravel文档中的例子所示

5us2dqdw

5us2dqdw2#

在四处徘徊之后,我决定创建一个新的中间件,它与所有中间件usermanageradmin的相似性相匹配

g2ieeal7

g2ieeal73#

是的你可以

为此,创建一个具有所需名称的中间件,因此在中间件中添加一个名为$roles的属性(如果需要,可以更改名称)

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

相关问题