# Спецификация Role JSON DSL

Формат JSON для описания ролей 1С, используемый навыком `/role-compile`.

## Обзор

Role JSON DSL — компактный JSON-формат, транслируемый скриптом в XML-файлы роли 1С:Предприятия (метаданные + Rights.xml). Поддерживает пресеты прав, русские синонимы типов и прав, шаблоны ограничений (RLS).

## Корневой объект

| Поле | Тип | Обяз. | По умолчанию | Описание |
|------|-----|:-----:|:------------:|----------|
| `name` | string | да | — | Программное имя роли |
| `synonym` | string | нет | = name | Отображаемое имя |
| `comment` | string | нет | `""` | Комментарий |
| `setForNewObjects` | bool | нет | `false` | Устанавливать для новых объектов |
| `setForAttributesByDefault` | bool | нет | `true` | Устанавливать для реквизитов по умолчанию |
| `independentRightsOfChildObjects` | bool | нет | `false` | Независимые права подчинённых объектов |
| `objects` | array | нет | `[]` | Массив объектов метаданных с правами |
| `templates` | array | нет | `[]` | Шаблоны ограничений (RLS) |

## Элементы `objects`

Массив принимает два формата, которые можно смешивать.

### Строковый shorthand

```
"Тип.Имя: @пресет"
"Тип.Имя: Право1, Право2"
```

Тип — английский (Catalog) или русский (Справочник). Права — английские (Read) или русские (Чтение).

### Объектная форма

| Поле | Тип | Обяз. | Описание |
|------|-----|:-----:|----------|
| `name` | string | да | Полное имя объекта: `Тип.Имя` |
| `preset` | string | нет | Пресет: `"view"`, `"edit"` (без `@`) |
| `rights` | object\|array | нет | Переопределения: `{"Right": bool}` или `["Right1", "Right2"]` |
| `rls` | object | нет | RLS: `{"ИмяПрава": "текст условия или #шаблон"}` |

При наличии `preset` + `rights` — сначала применяется пресет, затем `rights` переопределяют отдельные права.

## Пресеты

Три встроенных пресета определяют набор прав в зависимости от типа объекта:

| Пресет | Назначение |
|--------|------------|
| `view` | Просмотр: Read, View (+InputByString для справочников/документов; Use+View для обработок/отчётов) |
| `edit` | Полное редактирование: CRUD + Interactive* + Posting (документы) |

Подробные таблицы прав для каждого типа объекта — в `.claude/skills/role-compile/dsl-reference.md`.

## Шаблоны ограничений (RLS)

Элементы массива `templates`:

| Поле | Тип | Описание |
|------|-----|----------|
| `name` | string | Имя шаблона с параметрами: `"ДляОбъекта(Модификатор)"` |
| `condition` | string | Текст условия. `&` экранируется в `&amp;` автоматически |

Ссылка на шаблон в `rls`: `"#ИмяШаблона(\"параметры\")"` — начинается с `#`.

## Русские синонимы

DSL принимает русские имена типов и прав, транслируя их в английские. Полные таблицы соответствий — в `.claude/skills/role-compile/dsl-reference.md`.

Примеры: `Справочник` → Catalog, `Документ` → Document, `Чтение` → Read, `Просмотр` → View.

## Пример

```json
{
  "name": "МенеджерПродаж",
  "synonym": "Менеджер продаж",
  "objects": [
    "Document.РеализацияТоваровУслуг: @edit",
    "Catalog.Контрагенты: @view",
    "Catalog.Номенклатура: @view",
    {
      "name": "Document.ЗаказКлиента",
      "preset": "view",
      "rls": { "Read": "#ДляОбъекта(\"\")" }
    }
  ],
  "templates": [
    {
      "name": "ДляОбъекта(Модификатор)",
      "condition": "ГДЕ Организация = &ТекущаяОрганизация"
    }
  ]
}
```

## Генерируемые файлы

```
Roles/
  ИмяРоли.xml              # Метаданные (UUID, синоним, флаги)
  ИмяРоли/
    └── Ext/
        └── Rights.xml      # Права доступа (объекты, права, RLS)
```

## См. также

- [Роли (Rights.xml)](1c-role-spec.md) — XML-формат прав роли, типы объектов, RLS
- [Гайд по ролям](role-guide.md) — сценарии использования, рабочий цикл
