mcpField
R
role-compile

role-compile

github.com/nikolay-shirokovSecurity74152 installsUpdated today
Repository

About role-compile

role-compile is a skill for generating 1C role metadata and access-rights XML from a JSON definition. It supports presets, object-level rights, and RLS conditions, and avoids writing files when the definition contains errors.

Key features

  1. 01Generate role and rights XML
  2. 02Define rights with JSON DSL
  3. 03Apply view and edit presets
  4. 04Configure RLS conditions
  5. 05Validate definitions before writing

Use cases

  1. 01Create a 1C read-only role
  2. 02Generate roles with document-level RLS
  3. 03Set rights on nested service methods

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/nikolay-shirokov/cc-1c-skills --skill role-compile

After installing, type/role-compilein Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

dsl-reference.md
scripts/
role-compile.ps1
role-compile.py

Details

From the project README

/role-compile — генерация роли 1С из JSON DSL

Принимает JSON-определение роли → генерирует Roles/Имя.xml (метаданные) и Roles/Имя/Ext/Rights.xml (права). UUID автоматически.

Параметры и команда

ПараметрОписание
JsonPathПуть к JSON-определению роли
OutputDirКорень выгрузки конфигурации (где Configuration.xml, Roles/ и т.д.)
powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-compile.ps1" -JsonPath "<json>" -OutputDir "<ConfigDir>"

Создаёт {OutputDir}/Roles/Имя.xml и {OutputDir}/Roles/Имя/Ext/Rights.xml. Регистрирует <Role> в Configuration.xml.

JSON DSL

Структура
{ "name": "ИмяРоли", "synonym": "Отображаемое имя", "objects": [...], "templates": [...] }

Необязательные: comment (""), setForNewObjects (false), setForAttributesByDefault (true), independentRightsOfChildObjects (false).

Shorthand-строки и объектная форма
"objects": [
  "Catalog.Номенклатура: @view",
  "Document.Реализация: @edit",
  "DataProcessor.Загрузка: @view",
  "InformationRegister.Цены: Read, Update",
  { "name": "Document.Продажа", "preset": "view", "rls": {"Read": "#Шаблон(\"\")"} },
  { "name": "Catalog.Номенклатура.Attribute.Цена", "rights": {"View": false} }
]
  • Shorthand: "Тип.Имя: @пресет" или "Тип.Имя: Право1, Право2"
  • Объектная форма: preset + rights (точечные значения прав) + rls (ограничения)
Пресеты
ПресетДействие
@viewПросмотр — Read, View (+InputByString для справочников/документов; Use+View для обработок/отчётов)
@editПолное редактирование — CRUD + Interactive* + Posting (документы)

@ обязателен в shorthand. В объектной форме — "preset": "view" без @.

Сервисы

Право живёт на вложенном объекте сервиса — методе шаблона URL, операции, канале; на сервисе целиком его не бывает. Весь сервис — короткая запись, навык раскроет её по метаданным в OutputDir:

"objects": ["HTTPService.ЭДО: Use"]

→ HTTPService.ЭДО.URLTemplate.ЕстьНовыеДокументы.Method.POST: Use, и так по каждому методу каждого шаблона.

Часть маршрутов — полным путём: "HTTPService.ЭДО.URLTemplate.ЕстьНовыеДокументы.Method.POST: Use".

Шаблоны RLS
"templates": [{"name": "ДляОбъекта(Мод)", "condition": "ГДЕ Организация = &ТекОрг"}]

Ссылка в rls: "#ДляОбъекта(\"\")". Символ & автоматически экранируется в XML.

Длинное условие держи в файле — в значении пишется @путь. Относительный путь ищется рядом с JSON-описанием роли, затем в текущем каталоге:

"objects": [{"name": "Document.Продажа", "preset": "view", "rls": {"Read": "@условие.txt"}}],
"templates": [{"name": "ДляОбъекта(Мод)", "condition": "@шаблон.txt"}]

Примеры

Простая роль
{
  "name": "ЧтениеНоменклатуры", "synonym": "Чтение номенклатуры",
  "objects": ["Catalog.Номенклатура: @view", "Catalog.Контрагенты: @view", "DataProcessor.Загрузка: @view"]
}
Роль с RLS
{
  "name": "ЧтениеДокументовПоОрганизации",
  "synonym": "Чтение документов (ограничение по организации)",
  "objects": [
    "Catalog.Организации: @view",
    {"name": "Document.РеализацияТоваровУслуг", "preset": "view", "rls": {"Read": "#ДляОбъекта(\"\")"}}
  ],
  "templates": [{"name": "ДляОбъекта(Модификатор)", "condition": "ГДЕ Организация = &ТекущаяОрганизация"}]
}

Что можно писать в objects

Прав не бывает у Enum, CommonModule, DefinedType, CommonPicture, CommonTemplate, Language, FunctionalOption, EventSubscription, ScheduledJob, StyleItem, SettingsStorage и подобных — в дереве редактора ролей их нет. Ошибка в описании — отказ до записи: файлы не создаются, Configuration.xml не меняется.

Права на части объекта задаются точечным путём: Catalog.Контрагенты.Attribute.ИНН: View, Edit, WebService.Обмен.Operation.Загрузить: Use, HTTPService.ЭДО.URLTemplate.ЕстьНовыеДокументы.Method.POST: Use.

Реквизиты, табличные части, измерения и ресурсы наследуют права своего объекта — им задают запрет, чтобы закрыть унаследованное:

{"name": "Catalog.Товары.Attribute.Цена", "rights": {"View": false}}

Роль расширения, включённая в основные (DefaultRoles), прав на заимствованные объекты давать не может — платформа это запрещает. Такие права выноси в отдельную роль вне основных.

Полные таблицы «тип → права», виды вложенности (включая внешние источники данных), список типов без прав, таблицы пресетов и дополнительные примеры — в dsl-reference.md.

Верификация

/role-validate <RightsPath>  — проверка корректности XML, прав, RLS
/role-info <RightsPath>      — визуальная сводка структуры

Comments

Markdown supported