/role-compile — генерация роли 1С из JSON DSL
MCP routing
- Preferred path: use MCP
unicatoolunica.applyс операциямиrole.createиright.set. - Do not call internal MCP/CLI adapters directly. They are hidden behind
unicaand synchronized by the orchestrator. - Создание метит в корень конфигурации:
args.at— это<набор>:Configuration, имя роли лежит вvalues.name. Адреса, которого ещё нет, назвать нельзя. Дальнейшие права метят уже в саму роль. - Всегда сначала
dryRun: true. ПрименяйdryRun: falseтолько когда пользователь явно попросил внести именно эту правку, и только сifRevиз предпросмотра. - Роль и все её права публикуются одной транзакцией: либо роль появляется настроенной, либо не появляется вовсе.
- Каталогов выгрузки и путей к
Rights.xmlтут нет — их место занял адрес.
Пресеты разворачивает скилл, а не инструмент
right.set принимает одно право: values с object, right и хотя бы одним
из value и rls. Пресета @view инструмент не знает — разверни его сам по
таблице ниже в набор операций. Так видно, какие именно права выданы, и
предпросмотр показывает их поимённо, а не имя пресета.
Объект, ещё не перечисленный в роли, добавляется сам: заводить его отдельно не нужно.
Чего на канонической поверхности нет
Шаблоны RLS. Операции, создающей restrictionTemplate, в реестре нет.
right.set их сохраняет — существующие шаблоны при правке прав не страдают, —
но объявить новый нечем. Условие ограничения пиши прямо в values.rls; если
нужен именно переиспользуемый шаблон, скажи о пробеле контракта, а не
подставляй ссылку на шаблон, которого не создашь.
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" без @.
Для сервисов (WebService, HTTPService, IntegrationService) пресеты не определены — используй явные права: "WebService.Имя: Use".
Русские синонимы
Поддерживаются русские типы (Справочник→Catalog, Документ→Document) и права (Чтение→Read, Просмотр→View). Смешивание допустимо: "Справочник.Контрагенты: Чтение, 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": "ГДЕ Организация = &ТекущаяОрганизация"}]
}
Подробные таблицы пресетов, русских синонимов и дополнительные примеры — в dsl-reference.md.
Порядок
- Имя набора:
unica.view {}. - Разверни пресеты в явные права по таблице выше.
- Предпросмотр:
unica.applyсdryRun: true,atв корень конфигурации. - Применение: тот же вызов с
dryRun: falseиifRevиз предпросмотра. - Проверка:
unica.check {at}уже по адресу роли.
Примеры вызова
Роль с правами одним пакетом
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "unica.apply",
"arguments": {
"at": "main:Configuration",
"ops": [
{
"op": "role.create",
"args": {
"at": "main:Configuration",
"values": {"name": "ЧтениеНоменклатуры"}
}
},
{
"op": "right.set",
"args": {
"at": "main:Role.ЧтениеНоменклатуры",
"values": {"object": "Catalog.Номенклатура", "right": "Read", "value": true}
}
},
{
"op": "right.set",
"args": {
"at": "main:Role.ЧтениеНоменклатуры",
"values": {"object": "Catalog.Номенклатура", "right": "View", "value": true}
}
}
],
"dryRun": true
}
}
}
Право с ограничением записей
Условие пишется прямо в values.rls: шаблон объявить нечем.
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "unica.apply",
"arguments": {
"at": "main:Role.ЧтениеПоОрганизации",
"ops": [
{
"op": "right.set",
"args": {
"at": "main:Role.ЧтениеПоОрганизации",
"values": {
"object": "Document.РеализацияТоваровУслуг",
"right": "Read",
"value": true,
"rls": "ГДЕ Организация = &ТекущаяОрганизация"
}
}
}
],
"dryRun": false,
"ifRev": "<rev из предпросмотра>"
}
}
}
Верификация
Проверка корректности XML, прав и RLS
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "unica.check",
"arguments": {
"at": "<набор>:Role.<ИмяРоли>"
}
}
}
Сводка структуры роли
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "unica.view",
"arguments": {
"at": "<набор>:Role.<ИмяРоли>"
}
}
}