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

Slim4路由中间件如何传递参数?权限角色校验场景

Slim4 路由中间件传递角色参数实现授权校验

1. 改造授权中间件接收角色参数

修改UserAuthMiddleware,通过构造函数注入需要校验的角色,在请求处理环节完成权限校验:

class UserAuthMiddleware
{
    private string $requiredRole;

    // 构造函数注入目标校验角色
    public function __construct(string $requiredRole)
    {
        $this->requiredRole = $requiredRole;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // 根据实际业务逻辑获取当前用户角色,示例从请求属性中读取
        $currentUserRole = $request->getAttribute('user_role');
        
        // 校验用户角色是否匹配要求
        if ($currentUserRole !== $this->requiredRole) {
            return new Response(403, body: '权限不足,无法访问该资源');
        }

        return $handler->handle($request);
    }
}

2. 路由组配置时传递角色参数

在路由组绑定中间件时,直接实例化UserAuthMiddleware并传入对应角色参数,实现不同路由组的差异化角色校验:

$app->group('', function() use ($app){        
    $app->get('/manager', ManagerAction::class.':home')->setName("manager");
})->add(new UserAuthMiddleware('manager')); // 指定校验manager角色

$app->group('', function() use ($app){        
    $app->get('/admin', AdminAction::class.':home')->setName("admin");
})->add(new UserAuthMiddleware('admin')); // 指定校验admin角色

补充说明

  • 获取当前用户角色的逻辑需结合业务场景调整,比如从JWT令牌解析、用户会话或数据库查询中获取。
  • 若使用依赖注入容器管理中间件,也可通过容器工厂传递参数,核心逻辑都是让中间件接收并存储需校验的角色信息。

内容的提问来源于stack exchange,提问作者Tobia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:05:12