-
Notifications
You must be signed in to change notification settings - Fork 1
feat(service-ai): Add auth middleware metadata to AI route definitions #1008
Copy link
Copy link
Open
Description
当前 buildAIRoutes() 返回的 RouteDefinition 不包含任何认证/授权元数据。8 条 AI 路由直接暴露,无法区分:
- 需要认证的路由(如
POST /api/v1/ai/chat) - 公开路由(如
GET /api/v1/ai/models可能允许匿名) - 需要特定权限的路由(如 conversation 管理可能需要
ai:manage权限)
任务
-
扩展
RouteDefinition接口(packages/services/service-ai/src/routes/ai-routes.ts):export interface RouteDefinition { method: 'GET' | 'POST' | 'DELETE'; path: string; description: string; handler: (req: RouteRequest) => Promise<RouteResponse>; // ── 新增 ── /** Whether authentication is required (default: true) */ auth?: boolean; /** Required permission scopes */ permissions?: string[]; }
-
为每条路由标注 auth 和 permissions:
Route auth permissions POST /api/v1/ai/chattrue['ai:chat']POST /api/v1/ai/chat/streamtrue['ai:chat']POST /api/v1/ai/completetrue['ai:complete']GET /api/v1/ai/modelsfalse[]POST /api/v1/ai/conversationstrue['ai:conversations']GET /api/v1/ai/conversationstrue['ai:conversations']POST .../conversations/:id/messagestrue['ai:conversations']DELETE .../conversations/:idtrue['ai:conversations:delete'] -
扩展
RouteRequest增加 user context:export interface RouteRequest { body?: unknown; params?: Record<string, string>; query?: Record<string, string>; // ── 新增 ── /** Authenticated user context (populated by auth middleware) */ user?: { id: string; roles?: string[]; permissions?: string[] }; }
-
Conversation 路由增加 ownership 校验:
GET /conversations和DELETE /conversations/:id应仅返回/操作当前用户的对话 -
新增测试验证 auth metadata 正确性
-
更新 CHANGELOG.md
说明
- 实际的 auth 中间件由 HTTP server plugin(如
plugin-hono-server)在消费ai:routeshook 时挂载 - service-ai 只负责 声明 auth 需求,不负责 执行 auth 逻辑
- 这与 ObjectStack 的 "协议声明 + 运行时注入" 架构模式一致
验收标准
-
RouteDefinition包含auth和permissions字段 - 所有 8 条路由标注了正确的 auth 元数据
-
RouteRequest包含可选的usercontext - conversation 路由有 ownership 意识
- 新增 ≥5 个测试用例
- 全部测试通过
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels