You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:12:02