mcpField
R
role-compile

role-compile

github.com/nikolay-shirokov安全74152 次安装今天更新
代码仓库

关于 role-compile

role-compile 是一项技能,可根据 JSON 定义生成 1C 角色元数据和权限 XML。它支持预设、对象级权限和 RLS 条件,并会在定义有误时停止写入。

主要功能

  1. 01生成角色和权限 XML
  2. 02使用 JSON DSL 定义权限
  3. 03应用查看和编辑预设
  4. 04配置 RLS 条件
  5. 05写入前检查定义

适用场景

  1. 01创建 1C 只读角色
  2. 02生成带文档级 RLS 的角色
  3. 03设置嵌套服务方法的权限

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/role-compile确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

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

README 原文English

来自项目 README

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>      — визуальная сводка структуры

评论

支持 Markdown