Files
cc-1c-skills/docs/role-dsl-spec.md
T
Nick ShirokovandClaude Opus 5 7bbacd8ef4 feat(role-edit): точечная правка существующей роли
Закрывает #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
2026-09-13 17:39:12 +03:00

6.4 KiB
Raw Blame History

Спецификация 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.

Пример

{
  "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").

См. также