我可以检查Laravel 5.4路由组中是否存在上述中间件之一吗?如果满足任何中间件的条件,即user,manager或admin,则继续例如:
user
manager
admin
Route::group(['middleware' => ['user'|'manager'|'admin']], function () { // }
jtoj6r0c1#
也许你可以尝试只使用一个中间件来处理所有这些角色,你可以在这个中间件中使用一个参数,如Laravel文档中的例子所示
5us2dqdw2#
在四处徘徊之后,我决定创建一个新的中间件,它与所有中间件user、manager和admin的相似性相匹配
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'); });
3条答案
按热度按时间jtoj6r0c1#
也许你可以尝试只使用一个中间件来处理所有这些角色,你可以在这个中间件中使用一个参数,如Laravel文档中的例子所示
5us2dqdw2#
在四处徘徊之后,我决定创建一个新的中间件,它与所有中间件
user
、manager
和admin
的相似性相匹配g2ieeal73#
是的你可以
为此,创建一个具有所需名称的中间件,因此在中间件中添加一个名为$roles的属性(如果需要,可以更改名称)
用法: