permission-model.mdx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. ---
  2. title: "权限模型 - Allow/Ask/Deny 三级权限体系"
  3. description: "详解 Claude Code 的三级权限模型:Allow 自动放行、Ask 确认对话框、Deny 直接拒绝。权限规则的层级来源与优先级机制。"
  4. keywords: ["权限模型", "Allow Ask Deny", "权限控制", "安全权限", "工具权限"]
  5. ---
  6. {/* 本章目标:详解权限系统的设计 */}
  7. ## 三种权限行为
  8. 每一次工具调用,系统都会做出三种裁决之一:
  9. | 行为 | 含义 | 典型场景 |
  10. |------|------|---------|
  11. | **Allow** | 自动放行,用户无感知 | Read 工具读取项目内的文件 |
  12. | **Ask** | 弹出确认对话框,等待用户决定 | Bash 执行一条未知命令 |
  13. | **Deny** | 直接拒绝,AI 收到"权限被拒"的反馈 | 尝试执行被禁止的命令 |
  14. ## 权限规则的层级
  15. 规则可以来自多个来源,优先级从高到低:
  16. <Frame caption="权限规则层级(优先级从上到下递减)">
  17. <img src="/docs/images/permission-layers.png" alt="权限层级图" />
  18. </Frame>
  19. <Steps>
  20. <Step title="用户会话内设置">
  21. 用户在当前对话中手动授权的("对这个工具始终允许")
  22. </Step>
  23. <Step title="项目配置">
  24. 项目目录中的 `.claude/settings.json`,团队共享
  25. </Step>
  26. <Step title="用户全局配置">
  27. `~/.claude/settings.json`,跨项目生效
  28. </Step>
  29. <Step title="托管设置">
  30. 企业管理员下发的策略,用户不可覆盖
  31. </Step>
  32. <Step title="默认规则">
  33. 系统内置的基线规则
  34. </Step>
  35. </Steps>
  36. ## 规则的匹配方式
  37. 权限规则不是简单的"允许/禁止某个工具",它支持丰富的匹配条件:
  38. - **工具名匹配**:`"tool": "Bash"` → 针对所有 Bash 命令
  39. - **命令模式匹配**:`"command": "git *"` → 只针对 git 开头的命令
  40. - **路径匹配**:`"path": "src/**"` → 只允许操作 src 目录下的文件
  41. - **组合条件**:以上条件可以组合使用
  42. ## 权限模式
  43. 系统提供几种预设的权限模式,适应不同信任级别:
  44. | 模式 | 适用场景 |
  45. |------|---------|
  46. | **Default** | 日常使用,敏感操作逐一确认 |
  47. | **Plan Mode** | 探索阶段,AI 只能读不能写 |
  48. | **Bypass** | 完全信任 AI,所有操作自动放行(需显式开启) |
  49. ## Denial Tracking
  50. 系统不仅记录"允许了什么",还追踪"拒绝了什么":
  51. - 如果 AI 被连续拒绝多次同一类操作,系统会调整策略
  52. - 这防止 AI 陷入"反复请求同一个被拒操作"的死循环