Laravel 8 路由中定义自定义角色数组参数的方法咨询
Laravel 8 路由自定义角色参数实现方案
以下两种写法完全符合Laravel 8官方规范,可根据你的现有业务逻辑选择:
方案1:mergeAction存储自定义参数(兼容旧版中间件逻辑)
该方案和你Laravel 5版本的参数存储位置一致,不需要修改原有roles中间件的参数获取逻辑,完整代码如下:
Route::get('user_list', [UserController::class, 'index']) ->middleware(['auth', 'roles']) ->name('user_list') ->mergeAction(['roles' => ['Administrator', 'Operator']]);
在中间件中可以直接通过路由Action属性获取参数:
public function handle($request, Closure $next) { // 获取自定义角色数组,和旧版本获取逻辑完全一致 $allowedRoles = $request->route()->getAction('roles'); // 权限校验逻辑 if (!in_array(auth()->user()->role, $allowedRoles)) { abort(403, '无访问权限'); } return $next($request); }
方案2:直接向中间件传参(写法更简洁)
如果你的roles中间件可以调整参数接收方式,推荐使用更简洁的中间件传参写法:
Route::get('user_list', [UserController::class, 'index']) ->middleware(['auth', 'roles:Administrator,Operator']) ->name('user_list');
对应中间件调整为可变参数接收即可:
public function handle($request, Closure $next, ...$roles) { // $roles变量自动解析为['Administrator', 'Operator']数组 if (!in_array(auth()->user()->role, $roles)) { abort(403, '无访问权限'); } return $next($request); }
内容的提问来源于stack exchange,提问作者Ahad Ahmad
相关产品推荐
相关产品推荐

