关于 role-compile
role-compile 是一项技能,可根据 JSON 定义生成 1C 角色元数据和权限 XML。它支持预设、对象级权限和 RLS 条件,并会在定义有误时停止写入。
主要功能
- 01生成角色和权限 XML
- 02使用 JSON DSL 定义权限
- 03应用查看和编辑预设
- 04配置 RLS 条件
- 05写入前检查定义
适用场景
- 01创建 1C 只读角色
- 02生成带文档级 RLS 的角色
- 03设置嵌套服务方法的权限
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nikolay-shirokov/ cc-1c-skills --skill role-compile安装后在 Claude Code 中输入/role-compile确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
dsl-reference.mdscripts/role-compile.ps1role-compile.pyREADME 原文English
来自项目 READMEREADME 暂无中文译文,以下为英文原文;中文介绍见上方。
/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> — визуальная сводка структуры