---
name: xbsl-access-set
description: >
  Управляет секцией КонтрольДоступа в объектах конфигурации 1С:Элемент.
  Два режима: А — сводка текущих прав всех объектов проекта; Б — установить
  ПоУмолчанию с dry-run и подтверждением. Поддерживает: Справочник, Документ,
  РегистрСведений, РегистрНакопления, HttpСервис. Вызывай при запросах «настрой права
  доступа», «сделай доступным аутентифицированным», «покажи КонтрольДоступа», «установи
  РазрешеноАутентифицированным». НЕ для RLS (построчного доступа) — используй xbsl-pattern-rls.
compatibility: Requires Python 3.
---

Во всех командах ниже `{python}` означает `python` в Windows и `python3` в macOS/Linux/WSL. Выбирай команду сразу по текущей ОС, не запускай оба варианта.

## Назначение

Показывает сводку прав доступа по проекту и позволяет установить значение
`КонтрольДоступа.Разрешения.ПоУмолчанию` с dry-run и подтверждением.

## Алгоритм

### Шаг 1 — Показать текущее состояние

```bash
{python} .claude/skills/xbsl-access-set/scripts/access_state.py \
  --root <корень-проекта> [--object <ИмяОбъекта>]
```

Скрипт выводит JSON. Сформируй таблицу для пользователя:

| Объект | Тип | ПоУмолчанию |
|--------|-----|-------------|
| Склады | Справочник | null → дефолт = РазрешеноАдминистраторам |
| Заказы | Документ | РазрешеноАутентифицированным |
| Задачи | Справочник | РазрешенияВычисляютсяДляКаждогоОбъекта |

`null` = секция `КонтрольДоступа` отсутствует — платформа применяет `РазрешеноАдминистраторам`.

### Шаг 2 — Определить целевое значение

Если пользователь явно указал значение в запросе — использовать его. Иначе спросить:

> Какое значение установить?
> 1. `РазрешеноАутентифицированным` — только вошедшие пользователи *(рекомендуется)*
> 2. `РазрешеноВсем` — все, включая анонимных
> 3. `РазрешеноАдминистраторам` — только администраторы

⚠️ Если пользователь хочет `РазрешенияВычисляютсяДляКаждогоОбъекта` (построчный RLS) — направь в скилл `xbsl-pattern-rls`.

### Шаг 3 — Проверить exit-код при работе с одним объектом

```bash
{python} .claude/skills/xbsl-access-set/scripts/access_state.py \
  --root <корень> --set <значение> --object <Имя>
```

- **exit(3)** → объект использует `РазрешенияВычисляютсяДляКаждогоОбъекта`. Сообщи пользователю:
  > Объект `<Имя>` настроен на построчный RLS. Изменение `ПоУмолчанию` может нарушить логику доступа.
  > Используйте скилл `xbsl-pattern-rls`.

  Завершить работу, не применять изменений.

- **exit(0)** → продолжить к Шагу 4.

### Шаг 4 — Dry-run

```bash
{python} .claude/skills/xbsl-access-set/scripts/access_state.py \
  --root <корень> --set <значение> [--object <Имя>]
```

Отобразить вывод скрипта (список изменений + пропущенных).

### Шаг 5 — Показать план и ОСТАНОВИТЬСЯ

Показать вывод dry-run и **завершить ответ**. Не выполнять `--apply` в этом же ходу.

Спросить:
> Применить изменения?
> 1. Да
> 2. Нет

### Шаг 6 — Apply (только после подтверждения пользователя)

```bash
{python} .claude/skills/xbsl-access-set/scripts/access_state.py \
  --root <корень> --set <значение> [--object <Имя>] --apply
```

## Аргументы скрипта

| Аргумент | Описание |
|---|---|
| `--root` | Корень проекта (по умолчанию `.`) |
| `--set <значение>` | Целевое значение `ПоУмолчанию`. Без флага — режим сводки |
| `--object <Имя>` | Ограничить одним объектом |
| `--apply` | Применить изменения (без флага — dry-run) |

Допустимые значения `--set`:
`РазрешеноВсем`, `РазрешеноАутентифицированным`, `РазрешеноАдминистраторам`, `РазрешенияВычисляются`.

Значение `РазрешенияВычисляютсяДляКаждогоОбъекта` напрямую установить нельзя — используй `xbsl-pattern-rls`.

## Коды выхода

- **0** — успех
- **1** — ошибка (проект не найден, объект не найден, недопустимое значение)
- **3** — объект с `--object` использует `РазрешенияВычисляютсяДляКаждогоОбъекта` → направить в `xbsl-pattern-rls`

## Примечания

- Объекты с `РазрешенияВычисляютсяДляКаждогоОбъекта` при пакетном обновлении автоматически пропускаются с предупреждением.
- Если объект уже имеет целевое значение — пропускается (файл не изменяется).
- Секция вставляется перед `Реквизиты:`/`Измерения:`/`ШаблоныUrl:` в зависимости от типа объекта.
- HttpСервис: обновляется только верхнеуровневый `КонтрольДоступа` (не вложенные в `ШаблоныUrl`).
