Add script-based /role-compile and /role-validate skills

Convert /role-compile from instruction-based to PowerShell script with JSON DSL:
- Presets (@view, @edit, @use) for common right sets
- String shorthand and object form with RLS support
- Russian synonym translation for object types and rights
- Auto UUID generation, UTF-8 BOM output

Add /role-validate for structural validation of Rights.xml:
- XML well-formedness, namespace, global flags
- Right name validation per object type with typo suggestions
- RLS condition and template checks
- Optional metadata validation (UUID, Name, Synonym)

Update README and role-guide with new skills documentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-02-10 10:29:59 +03:00
parent 65afdf2e55
commit dc10422f10
6 changed files with 1574 additions and 181 deletions
+102 -16
View File
@@ -1,13 +1,73 @@
# Роли (Role)
Навыки группы `/role-*` позволяют анализировать и создавать роли 1С — XML-файлы прав доступа (Rights.xml) и метаданных.
Навыки группы `/role-*` позволяют анализировать, создавать и проверять роли 1С — XML-файлы прав доступа (Rights.xml) и метаданных.
## Навыки
| Навык | Параметры | Описание |
|-------|-----------|----------|
| `/role-info` | `<RightsPath>` | Компактная сводка прав: объекты по типам, только разрешённые, RLS, шаблоны |
| `/role-compile` | `<RoleName> <RolesDir>` | Создание роли: метаданные + Rights.xml по описанию прав |
| `/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.Загрузка: @use"
]
}
```
Формат строки: `Тип.Имя: @пресет` или `Тип.Имя: Право1, Право2`.
### Объектная форма (RLS, переопределения)
```json
{
"name": "Document.Реализация",
"preset": "view",
"rights": { "Delete": false },
"rls": { "Read": "#ДляОбъекта(\"\")" }
}
```
Форматы можно смешивать в одном массиве `objects`.
### Пресеты
| Пресет | Действие |
|--------|----------|
| `@view` | Просмотр: Read, View, InputByString (для справочников/документов); Read, View (для регистров) |
| `@edit` | Полное редактирование: CRUD + Interactive* + Posting (для документов) |
| `@use` | Использование: Use, View (для обработок/отчётов/сервисов) |
`@` обязателен в строковом shorthand. В объектной форме — ключ `preset` без `@`.
### Русские синонимы
Скрипт принимает русские имена типов и прав: `Справочник` → Catalog, `Чтение` → Read, `Проведение` → Posting и т.д. Полный список — в [SKILL.md навыка](../.claude/skills/role-compile/SKILL.md).
## Сценарии использования
@@ -22,15 +82,6 @@ Claude вызовет `/role-info`, получит компактную свод
- где есть ограничения RLS
- какие шаблоны ограничений используются
### Создание роли для регламентного задания
```
> Проанализируй модуль регламентного задания ОбновлениеКурсовВалют
> и создай роль с минимальными правами для его выполнения
```
Claude проанализирует код, определит используемые объекты метаданных, и вызовет `/role-compile` для создания роли с нужными правами (Read, Update, Posting и т.д.).
### Создание роли по описанию
```
@@ -41,11 +92,46 @@ Claude проанализирует код, определит использу
> - Регистр ЦеныНоменклатуры: чтение
```
Рабочий цикл:
1. Claude генерирует `Roles/МенеджерПродаж.xml` (метаданные с UUID)
2. Claude генерирует `Roles/МенеджерПродаж/Ext/Rights.xml` (права)
3. Регистрирует роль в `Configuration.xml` (`<ChildObjects>`)
4. Проверяет результат через `/role-info`
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, отсутствующие элементы) и предупреждения (неизвестные типы объектов, подозрительные имена прав с подсказками).
## Структура файлов роли