Authorization Interceptor(授权拦截器)
带挂起语义的拦截器模式变体。在核心逻辑执行前插入授权检查层,支持通行、拒绝、异步挂起等待用户审批三种出口,区别于标准 Interceptor 的同步放行/拦截二元语义。
定义
Authorization Interceptor 是 Interceptor 模式的变体,专用于需要权限决策的场景。与标准 Interceptor(放行/拦截)不同,它支持三种出口:
- 通行(approve):允许操作继续执行
- 拒绝(deny):阻止操作,记录拒绝结果
- 挂起(pending):暂停等待外部(如用户)审批后继续
典型案例
vercel/ai SDK 的 Tool Approval 系统(generate-text.ts:L1038-L1137)在 do-while 循环内、tool 执行之前插入授权拦截层:
typescript
// 对每个 tool call 执行 resolveToolApproval()
// → [user-approval] 挂起,生成审批请求
// → [approved] 自动通行,记录批准 response
// → [denied] 阻止执行,记录拒绝 result
被拒绝的 tool call 不进入 executeTools(),但结果仍写入 content,使 LLM 能感知到"操作被拒绝"。
与 Interceptor 的区别
| 标准 Interceptor | Authorization Interceptor | |
|---|---|---|
| 出口数 | 2(放行/拦截) | 3(通行/拒绝/挂起) |
| 执行模式 | 同步 | 可异步(等待用户审批) |
| 拦截后结果 | 通常无结果 | 拒绝结果仍写入系统 |
应用场景
- 工具调用前的权限检查(如文件系统写入、代码执行)
- Human-in-the-loop 审批流程
- 多租户系统中的操作授权