当前 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/chat |
true |
['ai:chat'] |
POST /api/v1/ai/chat/stream |
true |
['ai:chat'] |
POST /api/v1/ai/complete |
true |
['ai:complete'] |
GET /api/v1/ai/models |
false |
[] |
POST /api/v1/ai/conversations |
true |
['ai:conversations'] |
GET /api/v1/ai/conversations |
true |
['ai:conversations'] |
POST .../conversations/:id/messages |
true |
['ai:conversations'] |
DELETE .../conversations/:id |
true |
['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:routes hook 时挂载
- service-ai 只负责 声明 auth 需求,不负责 执行 auth 逻辑
- 这与 ObjectStack 的 "协议声明 + 运行时注入" 架构模式一致
验收标准
当前
buildAIRoutes()返回的RouteDefinition不包含任何认证/授权元数据。8 条 AI 路由直接暴露,无法区分:POST /api/v1/ai/chat)GET /api/v1/ai/models可能允许匿名)ai:manage权限)任务
扩展
RouteDefinition接口(packages/services/service-ai/src/routes/ai-routes.ts):为每条路由标注 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:Conversation 路由增加 ownership 校验:
GET /conversations和DELETE /conversations/:id应仅返回/操作当前用户的对话新增测试验证 auth metadata 正确性
更新 CHANGELOG.md
说明
plugin-hono-server)在消费ai:routeshook 时挂载验收标准
RouteDefinition包含auth和permissions字段RouteRequest包含可选的usercontext