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 的区别

标准 InterceptorAuthorization Interceptor
出口数2(放行/拦截)3(通行/拒绝/挂起)
执行模式同步可异步(等待用户审批)
拦截后结果通常无结果拒绝结果仍写入系统

应用场景

  • 工具调用前的权限检查(如文件系统写入、代码执行)
  • Human-in-the-loop 审批流程
  • 多租户系统中的操作授权