mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-18 07:35:52 +03:00
Закрывает #43. Повторный role-compile перевыпускал UUID и переписывал Rights.xml целиком, поэтому добавить права существующей роли было нечем — оставалась ручная правка XML. Операции: add-rights, set-rights, remove-rights, deny-rights, set-rls, remove-rls, add/set/remove-template, modify-property, set-synonym, set-comment. Пакет через ;;, значение из файла через @путь, отказ до записи со всеми причинами разом, авто-вызов role-validate. Грамматика имён и пресетов — та же, что у role-compile: копии таблиц и валидаторов взяты побайтово, навык дописан в 16 семей реестра check-inline-drift. Правка держит инвариант «меняется только то, что просили»: узел встаёт на своё место по uuid объекта, право — по канону типа, набор замыкается по зависимостям, снятие и запрет идут каскадом в обратную сторону. Проверено раундтрипом через платформу — выход обоих портов совпал с выгрузкой 1С байт в байт, включая RLS с полями и двумя строками ограничений. 22 кейса на обоих портах, 17 снэпшотов приняты платформой. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FGkXwoXTuafcu1SXMsauFq
129 lines
6.4 KiB
Markdown
129 lines
6.4 KiB
Markdown
# Спецификация 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 | Текст условия. `&` экранируется в `&` автоматически |
|
||
|
||
Ссылка на шаблон в `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)
|
||
```
|
||
|
||
## Правка существующей роли
|
||
|
||
`role-compile` описывает роль целиком и при повторном запуске перевыпускает UUID. Существующую
|
||
роль правит `role-edit`, у которого не JSON-описание роли, а операции над ней:
|
||
|
||
| Операция | Значение |
|
||
|----------|----------|
|
||
| `add-rights` / `set-rights` / `remove-rights` / `deny-rights` | `Тип.Имя: Право1, Право2` или `Тип.Имя: @пресет`; у `remove-rights` форма без двоеточия удаляет объект целиком |
|
||
| `set-rls` / `remove-rls` | `Тип.Имя.Право: условие`, поля — в скобках: `Тип.Имя.Право[Ref, Date]: ` |
|
||
| `add-template` / `set-template` / `remove-template` | `Имя(Параметры): условие` |
|
||
| `modify-property` | `setForNewObjects=true` |
|
||
| `set-synonym` / `set-comment` | текст |
|
||
|
||
Грамматика имён объектов, прав и пресетов — та же, что в `objects` выше. Пакет операций —
|
||
через `;;`, многострочное условие — из файла (`-Value "@условие.txt"`).
|
||
|
||
## См. также
|
||
|
||
- [Роли (Rights.xml)](1c-role-spec.md) — XML-формат прав роли, типы объектов, RLS
|
||
- [Гайд по ролям](role-guide.md) — сценарии использования, рабочий цикл
|