Claude Code通关手册(二):搞清权限,效率翻倍


💡TIP

这是Claude Code通关手册的第二篇,上一篇我们初步了解了Claude Code,这一篇要解决新手最头疼的问题——权限系统,搞清Claude Code的权限分配,让Claude Code真正能为我们提效

使用Claude Code的开发者,想必都经历过这样的崩溃场景:

“我要读取pom.xml文件,可以吗?”——同意
“我要将依赖写入pom.xml文件,可以吗?”——同意

当第10次弹出权限请求时,大多数人早已忍无可忍,只想大喊:”我全都同意了,你自己去运行吧!”

然而,当我们真正去查找解决方案时,才发现Claude Code有一个--dangerously-skip-permissions参数可以跳过权限确认。从名称就能看出,这是一个”危险”的选项。

我们并不需要采取如此极端的方式。权限系统实际上是我们的安全屏障,无需给予Claude Code全部权限。合理分配权限,能够在效率与安全之间取得完美平衡。

本文将教你如何善用权限系统,将那些烦人的权限提示转化为得心应手的工具,让它们从拦路虎变成遥控器。

五种权限模式:从保姆级守护到全自动飙车

Claude Code内置了五种权限模式,覆盖从最保守到最激进的所有场景,可以在会话中按shift + tab快速进行切换。

模式 行为 适用场景
default(默认) 读文件自动通过
写文件需要确认
命令需要确认
新手优化
accept edits on 读文件自动通过
写文件自动通过
命令需要确认
日常开发模式
plan mode on 只能读和分析
不能写和执行命令
探索不熟悉的代码库
代码审查、分析
dontAsk 读写命令全自动
但是不跳过安全检查
严格锁定、高度安全的环境
需要注意的是所有未经明确授权的操作都会被静默拒绝
可能会导致执行任务时由于权限受阻,影响任务完成
bypass ⚠️ 完全跳过所有检查
目前权限级别最高的模式
完全自动化的 CI/CD 或容器环境

在交互模式中按 Shift+Tab,你会看到状态栏在三种模式间循环:

normal-mode → ⏵⏵ accept edits on → ⏸ plan mode on → normal-mode

[!NOTE]
dontAsk和bypass模式由于权限较高,无法在会话中进行选择,需要在开启会话时指定

># 开启dontAsk模式,通过 `--permission-mode` 参数直接指定
>claude --permission-mode dontAsk
># 开启 bypass 模式
>claude --dangerously-skip-permissions

日常开发推荐使用acceptEdit模式,因为在写代码这件事上,大概率是希望 Claude 直接改的——毕竟你都让它写代码了,肯定是希望它直接写入文件。但执行 shell 命令(比如 mvn depolygit push)的时候,你还是想看一眼再确认。

你也可以直接在配置文件中灵活配置可执行的操作,这正是接下来将要讲述的内容。

项目自定义权限:从统一守则到私人保镖

通用权限规则能解决 80% 的日常场景,但每个项目都有自己的脾气。这时候,就需要你亲自给 Claude Code 下达“私人保镖”级别的专属指令——让它知道:在这个项目里,哪些命令可以闭眼通过,哪些操作必须反复确认。

配置文件在哪里?

配置文件位置 适用场景
~/.claude/settings.json 全局配置,所有项目通用
对 Claude Code 的底线要求
项目根目录/.claude/settings.json 项目级配置,提交到 Git 跟团队共享
这个项目专属的权限规则
项目根目录/.claude/settings.local.json 个人本地配置,不提交到 Git
你自己的偏好,不影响队友

优先级:local > project > global

配置文件实操

还需要手动维护项目的配置文件吗?那也太落后了。在Claude Code的会话中,直接让它帮你生成一份项目维度的配置文件吧。

请在当前项目根目录下创建 .claude/settings.json 配置文件,采用 allow/ask/deny 的权限配置模式
具体要求:  
1.先扫描分析项目的技术栈(如 Node.js、Python、Java、Go 等)和常用命令(构建、测试、lint、启动等)。
2.根据项目实际命令(如 npm test → Bash(npm test *),python manage.py runserver → Bash(python manage.py runserver))动态填充 allow 列表。
3.增加常见安全规则(如rm -rf、.env 读取等)。

Claude Code会在项目根目录/.claude/settings.json中生成一份配置文件,我们可以修改这个配置文件来控制我们的权限。

一个最简单的权限配置文件如下:

{  
  "permissions": {  
    "defaultMode": "acceptEdits",  
  
    "allow": [  
      "Read",  
      "Edit(./src/**)",  
      "Write(./src/**)",  
      "MultiEdit(./src/**)",  
      "Bash(mvn clean)",  
      "Bash(mvn compile)",  
      "Bash(mvn package)",  
      "Bash(mvn install)",  
      "Bash(npx tsc --noEmit)",  
      "Bash(git status)",  
      "Bash(git diff *)",  
      "Bash(git add *)",  
      "Bash(git commit *)",  
      "Bash(git log *)",  
      "Bash(ls *)",  
      "Bash(cat *)",  
      "Bash(mkdir *)"  
    ],  
  
    "ask": [  
      "Bash(git push *)",  
      "Bash(npm deploy)",  
    ],  
  
    "deny": [  
      "Bash(rm -rf *)",  
      "Bash(sudo *)",  
      "Bash(curl *)",  
      "Read(./.env*)",  
      "Read(./secrets/**)",  
      "Edit(./.env*)",  
      "WebFetch"  
    ]  
  }  
}

这份配置翻译成人话就是:

allow(自动通过):读任何文件、编辑 src 目录下的代码、跑开发/构建/测试命令、常规 Git 操作——这些都是日常高频操作,不用每次都问我。

ask(问我一声):推代码到远程、安装新依赖、执行数据库迁移——这几个操作有一定风险,让我确认一下。

deny(绝对禁止):删除操作、sudo 提权、读取环境变量文件——不管什么情况,这些操作一律拦截。

==deny 永远优先级最高==。就算你在 allow 里写了允许读 .env 文件,只要 deny 里也有这条规则,Claude 就死也读不了。这是安全底线,不可妥协。
Claude Code所有的配置就都是在这三层里做文章。

/permissions 命令:不用手写 JSON

如果你不想手动编辑 JSON 文件,Claude Code 提供了交互式配置界面。在会话中输入:

/permissions

它会弹出一个交互式菜单,供你添加或移除权限规则。此外,当 Claude 询问你是否允许某个操作时,选择”Always allow”选项会自动将该规则添加到你的允许列表中。

这种”在使用过程中逐步配置”的方式非常符合用户习惯——系统首次询问时,用户同意并勾选”以后都允许”,后续便不再重复询问。

安全最佳实践

权限配得再宽松,这三条红线不能碰:

红线一:永远不要允许看不懂的 Bash 命令

Claude 有时会生成复杂的 shell 命令。如果你不理解其用途,切勿直接执行。应先要求 Claude 解释命令的具体功能和目的,确认安全无误后再决定是否执行。

红线二:.env 文件必须列入拒绝访问名单

你的 .env 文件包含数据库密码、API Key 等敏感信息。请务必将 Read(./.env*)Edit(./.env*) 权限加入拒绝列表,彻底封堵这一安全隐患。

红线三:生产环境操作需使用 plan 模式

在生产代码库中工作时,首先切换至 plan 模式。让 Claude 仅进行分析和方案制定,不直接执行任何修改。确认方案安全可行后,再切换回 acceptEdits 模式执行具体操作。这如同手术前先进行影像检查明确情况——切勿盲目动手操作。

一份你能直接复制的全局配置

最后,送你一份经过实战验证的全局配置模板。把它放到 ~/.claude/settings.json,作为你所有项目的基础配置。

{  
  "permissions": {  
    "defaultMode": "acceptEdits",  
  
    "allow": [  
      "Read",  
      "Bash(ls *)",  
      "Bash(cat *)",  
      "Bash(head *)",  
      "Bash(tail *)",  
      "Bash(wc *)",  
      "Bash(find *)",  
      "Bash(grep *)",  
      "Bash(echo *)",  
      "Bash(mkdir *)",  
      "Bash(git status)",  
      "Bash(git log *)",  
      "Bash(git diff *)",  
      "Bash(git branch *)",  
      "Bash(git show *)",  
      "Bash(node --version)",  
      "Bash(npm --version)",  
      "Bash(npx tsc --noEmit)"  
    ],  
  
    "deny": [  
      "Bash(rm -rf *)",  
      "Bash(sudo *)",  
      "Bash(curl *)",  
      "Bash(wget *)",  
      "Read(./.env*)",  
      "Read(./secrets/**)",  
      "Read(./**/credentials*)",  
      "Edit(./.env*)",  
      "Edit(./secrets/**)",  
      "WebFetch"
    ]  
  }  
}

这是全局的”安全底线”。在具体项目中,你再通过项目级的 .claude/settings.json 添加项目特有的 allow 规则(比如 mvn cleanmvn install 之类的命令)。

采用全局与项目两层协作机制:全局配置作为安全基线及通用便利性设置,项目配置则专注于特定项目需求,仅对当前项目生效。通过这套配置体系,权限提示可减少80%以上,同时确保安全基线保持不变。

本篇小结

三个核心收获:

第一:权限系统的本质是三层过滤器——deny(拒绝)> ask(询问)> allow(通过),优先级从高到低。理解这一模型后,所有配置都将变得水到渠成。

第二:在五种权限模式中,acceptEdits 是日常开发的首选——代码编辑自动通过,命令执行需要确认。按 Shift+Tab 可随时切换。

第三:全局与项目两层协作机制配合使用,既便捷又安全。


文章作者: gloamfox
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 gloamfox !
 上一篇
Claude Code通关手册(三):CLAUDE.md深度实战
本文详细介绍了如何使用CLAUDE.md文件为Claude Code提供项目长期记忆,解决每次对话重复交代技术栈的问题。文章涵盖了CLAUDE.md的定义、放置位置、内容编写原则、实际操作步骤,以及进阶配置如全局设置、Auto Memory功能和模块化规则系统,帮助开发者高效配置Claude Code,提升开发效率。
2026-04-08
下一篇 
Hexo插件:Obsidian tabs语法兼容
本文介绍了如何创建一个Hexo插件,解决Obsidian中的tabs语法在Hexo平台上无法正常显示的问题。作者详细提供了完整的插件代码,包括HTML解析、CSS样式和JavaScript交互功能,使Obsidian的tabs组件能够在Hexo博客中正确渲染和展示。
2026-04-07
  目录