# Настройка разрешений

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` пропускает все проверки безопасности. Используйте его только в полностью доверенных автоматизированных средах.