Платформа при загрузке сама доводит набор до полного: выдал Edit — получил ещё Read, Update и View, выдал View у обработки — получил Use. Навык писал ровно заданное, поэтому файл роли и база расходились сразу после первой загрузки. Таблица снята с платформы: по одной роли на каждое право, 209 + 43 роли в двух прогонах, ни одного отвергнутого (debug/role-edit). Зависимости оказались общими для типов, исключений четыре — обработка и отчёт держатся на Use, план счетов не тянет Read под историю данных, регистр сведений — короче на одно звено. Права, недопустимые для типа, отсекаются, у вложенных объектов зависимостей нет. Права конфигурации версионные: до формата 2.19 платформа взводила весь блок режимов окна с любым правом, с 2.19 (8.3.26) перестала. Граница измерена на шести платформах, 8.3.20 … 8.5.1. Дописанное перечисляется в выводе — права выдаются не молча. Проверка: выход обоих портов после загрузки и выгрузки совпал байт в байт. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FGkXwoXTuafcu1SXMsauFq
6.9 KiB
name, description, argument-hint, allowed-tools
| name | description | argument-hint | allowed-tools | ||||
|---|---|---|---|---|---|---|---|
| role-compile | Создание роли 1С из описания прав. Используй когда нужно создать новую роль с набором прав на объекты | <JsonPath> <OutputDir> |
|
/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", "rights": {"Delete": false}, "rls": {"Read": "#Шаблон(\"\")"} }
]
- Shorthand:
"Тип.Имя: @пресет"или"Тип.Имя: Право1, Право2" - Объектная форма:
preset+rights(переопределения) +rls(ограничения)
Пресеты
| Пресет | Действие |
|---|---|
@view |
Просмотр — Read, View (+InputByString для справочников/документов; Use+View для обработок/отчётов) |
@edit |
Полное редактирование — CRUD + Interactive* + Posting (документы) |
@ обязателен в shorthand. В объектной форме — "preset": "view" без @.
Зависимые права
Набор прав дополняется до замыкания: Edit тянет Read, Update, View; интерактивные права —
свой базовый набор; View у обработки и отчёта — Use. Дописанное перечисляется в выводе. Так же
поступает сама платформа при загрузке, поэтому без этого файл роли и база расходятся.
Сервисы
Платформа проверяет право на вложенном объекте сервиса — методе шаблона URL, операции, канале. Права на сервис целиком не существует.
Весь сервис — короткая запись, навык раскроет её по метаданным сервиса в OutputDir:
"objects": ["HTTPService.ЭДО: Use"]
→ HTTPService.ЭДО.URLTemplate.ЕстьНовыеДокументы.Method.POST: Use, и так по каждому методу каждого шаблона.
Часть маршрутов — полным путём: "HTTPService.ЭДО.URLTemplate.ЕстьНовыеДокументы.Method.POST: Use".
Русские синонимы
Поддерживаются русские типы (Справочник→Catalog, Документ→Document) и права (Чтение→Read, Просмотр→View). Каноничная форма — английская.
Шаблоны RLS
"templates": [{"name": "ДляОбъекта(Мод)", "condition": "ГДЕ Организация = &ТекОрг"}]
Ссылка в rls: "#ДляОбъекта(\"\")". Символ & автоматически экранируется в XML.
Примеры
Простая роль
{
"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
Права имеют 27 типов объектов; тип или имя права вне списка — ошибка: роль не создаётся, файлы не пишутся, Configuration.xml не меняется. Права нельзя назначить на Enum, CommonModule, DefinedType, CommonPicture, CommonTemplate, Language, FunctionalOption, EventSubscription, ScheduledJob, StyleItem, SettingsStorage и подобные — в дереве редактора ролей их нет.
Права на части объекта задаются точечным путём: Catalog.Контрагенты.Attribute.ИНН: View, Edit, WebService.Обмен.Operation.Загрузить: Use, HTTPService.ЭДО.URLTemplate.ЕстьНовыеДокументы.Method.POST: Use.
Роль расширения, включённая в основные (DefaultRoles), прав на заимствованные объекты давать не может — платформа это запрещает. Такие права выноси в отдельную роль вне основных.
Полные таблицы «тип → права», виды вложенности (включая внешние источники данных), список типов без прав, таблицы пресетов и дополнительные примеры — в dsl-reference.md.
Верификация
/role-validate <RightsPath> — проверка корректности XML, прав, RLS
/role-info <RightsPath> — визуальная сводка структуры