feat(routes): 迁移账号/全局歌单端点 + 鉴权依赖测试

迁移路由(/api/v1/*,与 Flask 同端点逐字段对齐):
- account/vip:admin/user 双路径 + 5 分钟缓存(降级结果 30s),
  VIP 探测单飞锁与 Flask 同源跨栈共享;未登录可访问(同 Flask)
- global/playlists、global/playlist:管理员闸(require_admin,403 对齐)
- web/deps.py 新增 require_admin;_resolve_user_cookies 支持可选用户(匿名审计保底)

测试:46/46(新增 10 项鉴权依赖:有效/管理员/封禁/禁用/顶号/伪造 Cookie、
401/403 闸);ruff All checks passed;pyright 0 errors。

契约奇偶校验:16 项全 OK(新增 account:vip、global:playlists/playlist、
非管理员 403);uvicorn 实跑双栈 account/vip 均 200、未授权歌单 403。
This commit is contained in:
snowy-yang committed 2026-09-26 01:15:22 +08:00
1 parent a2758aa0da
commit 6c3181341b
5 files changed
+287 -2

No files matched your search

+9
View File
@@ -79,3 +79,12 @@ async def require_login(
if user is None:
raise AppError('请先登录后再使用解析功能', 401, error_code='unauthorized')
return user
async def require_admin(
user: Annotated[SiteUser | None, Depends(current_user)],
) -> SiteUser:
"""管理员闸:非管理员抛 403(与 Flask admin_required 同形包体)。"""
if user is None or not user.is_admin:
raise AppError('需要管理员权限', 403, error_code='forbidden')
return user