yuetsh
20ecc05f63
fix(Minor M2): 比赛权限加中间件兜底
旧后端用 @check_contest_permission 装饰器,漏挂一眼看得出来;新后端手工在 handler
里调 canAccessContest,漏调一次就是静默放行,而且这类路由挂的是 optionalAuth
(本身不拦人),从路由注册那一行完全看不出它受保护。
新增 requireContestAccess(checkType, paramName),把「取比赛 → 404 → 鉴权 →
401/403」四步收进注册行。手工调用点 5 → 2:
- GET /contests/:id/access —— 报告权限而非强制,不能 403,留手工
- POST /submissions —— 比赛 id 来自请求体,中间件跑时 body 还没解析,留手工
两处都就地写了说明。canAccessContest 改成泛型,因为 Hono 的 Context 在
Variables 上逆变,写死 Context<AppEnv> 与 ContestEnv 不兼容。
实测拦截行为不变:匿名 401、登录 200、密码赛未过密码 403。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 07:00:58 -06:00
..
2026-08-07 01:25:36 -06:00
2026-08-07 01:25:36 -06:00
2026-08-07 07:00:58 -06:00
2026-08-07 01:25:36 -06:00
2026-08-07 01:25:36 -06:00
2026-08-07 01:25:36 -06:00
2026-08-07 01:59:19 -06:00
2026-08-07 06:48:05 -06:00