Закрывает #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
6.4 KiB
Спецификация 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.
Пример
{
"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) — XML-формат прав роли, типы объектов, RLS
- Гайд по ролям — сценарии использования, рабочий цикл