# Роли (Role)

Навыки группы `/role-*` позволяют анализировать, создавать и проверять роли 1С — XML-файлы прав доступа (Rights.xml) и метаданных.

## Навыки

| Навык | Параметры | Описание |
|-------|-----------|----------|
| `/role-info` | `<RightsPath>` | Компактная сводка прав: объекты по типам, только разрешённые, RLS, шаблоны |
| `/role-compile` | `<JsonPath> <RolesDir>` | Генерация роли из JSON DSL: метаданные + Rights.xml, UUID автоматически |
| `/role-validate` | `<RightsPath> [MetadataPath]` | Валидация структурной корректности: XML, namespace, права, RLS, шаблоны |

## Рабочий цикл

```
Описание прав (текст) → JSON DSL → /role-compile → XML-исходники → /role-validate
                                                                  → /role-info
```

1. Claude формирует JSON-определение роли (с пресетами или явными правами)
2. `/role-compile` генерирует `Roles/ИмяРоли.xml` + `Roles/ИмяРоли/Ext/Rights.xml`
3. `/role-validate` проверяет корректность сгенерированного XML
4. `/role-info` выводит компактную сводку для визуальной проверки

## JSON DSL — компактный формат

Роли описываются в JSON с двумя уровнями детализации:

### Строковый shorthand (простые роли)

```json
{
  "name": "ЧтениеНоменклатуры",
  "synonym": "Чтение номенклатуры",
  "objects": [
    "Catalog.Номенклатура: @view",
    "Catalog.Контрагенты: @view",
    "DataProcessor.Загрузка: @view"
  ]
}
```

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

### Объектная форма (RLS, переопределения)

```json
{
  "name": "Document.Реализация",
  "preset": "view",
  "rights": { "Delete": false },
  "rls": { "Read": "#ДляОбъекта(\"\")" }
}
```

Форматы можно смешивать в одном массиве `objects`.

### Пресеты

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

`@` обязателен в строковом shorthand. В объектной форме — ключ `preset` без `@`.

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

Скрипт принимает русские имена типов и прав: `Справочник` → Catalog, `Чтение` → Read, `Проведение` → Posting и т.д. Полный список — в [спецификации Role DSL](role-dsl-spec.md).

## Сценарии использования

### Анализ существующей роли

```
> Проанализируй права роли Roles/БазовыеПраваБП/Ext/Rights.xml
```

Claude вызовет `/role-info`, получит компактную сводку (тысячи строк XML → 50–300 строк текста) и опишет:
- какие объекты доступны и с какими правами
- где есть ограничения RLS
- какие шаблоны ограничений используются

### Создание роли по описанию

```
> Создай роль МенеджерПродаж с правами:
> - Документ РеализацияТоваровУслуг: полные права
> - Справочник Контрагенты: чтение
> - Справочник Номенклатура: чтение
> - Регистр ЦеныНоменклатуры: чтение
```

Claude сформирует JSON с пресетами:
```json
{
  "name": "МенеджерПродаж",
  "synonym": "Менеджер продаж",
  "objects": [
    "Document.РеализацияТоваровУслуг: @edit",
    "Catalog.Контрагенты: @view",
    "Catalog.Номенклатура: @view",
    "InformationRegister.ЦеныНоменклатуры: @view"
  ]
}
```

И вызовет `/role-compile` → `/role-validate` → `/role-info`.

### Создание роли для регламентного задания

```
> Проанализируй модуль регламентного задания ОбновлениеКурсовВалют
> и создай роль с минимальными правами для его выполнения
```

Claude проанализирует код, определит используемые объекты, создаст JSON с точечными правами (без пресетов — только нужные права), и скомпилирует роль.

### Создание роли с RLS

```
> Создай роль для чтения документов с ограничением по организации
```

Claude использует объектную форму JSON с шаблонами ограничений.

### Проверка существующей роли

```
> Проверь корректность роли Roles/МояРоль/Ext/Rights.xml
```

Claude вызовет `/role-validate` и покажет результат: ошибки (невалидный XML, отсутствующие элементы) и предупреждения (неизвестные типы объектов, подозрительные имена прав с подсказками).

## Структура файлов роли

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

Регистрация в `Configuration.xml`:
```xml
<ChildObjects>
    <Role>ИмяРоли</Role>
</ChildObjects>
```

## Спецификация

- [1c-role-spec.md](1c-role-spec.md) — XML-формат прав роли, типы объектов, RLS, шаблоны ограничений
- [role-dsl-spec.md](role-dsl-spec.md) — JSON DSL для описания ролей (формат входных данных `/role-compile`)
