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
相关产品推荐
相关产品推荐

