# 权限配置

Claude Code 使用权限系统来控制哪些操作需要用户确认。合理配置权限，既能保证安全，又能提高开发效率。

## 四种权限模式

| 模式 | 说明 | 适用场景 |
|------|------|---------|
| `default` | 首次使用工具时询问权限 | 日常开发，平衡安全与效率 |
| `acceptEdits` | 自动批准文件编辑，其他操作仍需确认 | 需要频繁修改文件的任务 |
| `plan` | 只分析不执行（Plan Mode） | 探索和审查代码，不希望 Claude 做任何修改 |
| `bypassPermissions` | 跳过所有权限提示 | CI/CD 自动化、受信任的安全环境 |

### 切换权限模式

- 按 **`Shift+Tab`** 循环切换权限模式
- 按 **`Shift+Tab`** 两次进入 Plan Mode（按 Escape 退出）
- 在对话框中直接选择模式

## 配置默认权限模式

在 `.claude/settings.json` 中配置：

```json
{
  "permissions": {
    "defaultMode": "acceptEdits"
  }
}
```

## Allow 规则：预批准命令

预先批准特定命令，避免每次询问：

```json
{
  "permissions": {
    "allow": [
      "Bash(npm run lint)",
      "Bash(npm run test:*)",
      "Bash(git status)",
      "Bash(git add:*)",
      "Bash(git diff:*)"
    ]
  }
}
```

**Allow 规则语法**：
- `Bash(命令)` — 精确匹配命令
- `Bash(命令前缀:*)` — 匹配以该前缀开头的命令
- `Read(文件路径)` — 允许读取特定文件
- `Write(文件路径)` — 允许写入特定文件

## Deny 规则：保护敏感文件

阻止 Claude 访问或修改敏感文件：

```json
{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Write(./.git/**)",
      "Bash(rm -rf:*)"
    ]
  }
}
```

**Deny 规则语法**：
- 路径模式支持 `*`（单层）和 `**`（多层）通配符
- Deny 规则**优先级高于** Allow 规则

## 同时使用 Allow 和 Deny

```json
{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Bash(npm run *)",
      "Bash(git status)",
      "Bash(git diff)"
    ],
    "deny": [
      "Bash(git push:*)",
      "Bash(rm -rf:*)",
      "Read(./.env*)"
    ]
  }
}
```

## 配置文件层级

Claude Code 按以下优先级合并权限配置：

| 优先级 | 位置 | 适用范围 |
|--------|------|---------|
| 最高 | `.claude/settings.local.json`（不提交到 Git） | 个人本地覆盖 |
| 中 | `.claude/settings.json`（提交到 Git） | 团队共享配置 |
| 最低 | `~/.claude/settings.json` | 全局用户配置 |

**团队协作建议**：
- 将团队通用的 allow/deny 规则放在 `.claude/settings.json` 并提交到 Git
- 个人特殊需求放在 `.claude/settings.local.json`，加入 `.gitignore`

## 最佳实践

**1. 保护敏感凭据**
```json
{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./credentials/**)",
      "Read(./.ssh/**)"
    ]
  }
}
```

**2. 前端项目配置**
```json
{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Bash(npm run dev)",
      "Bash(npm run build)",
      "Bash(npm run test:*)",
      "Bash(npm run lint:*)"
    ]
  }
}
```

**3. CI/CD 自动化**
```json
{
  "permissions": {
    "defaultMode": "bypassPermissions"
  }
}
```

> ⚠️ **注意**：`bypassPermissions` 模式会跳过所有安全检查，只在完全受信任的自动化环境中使用。