role-edit · git:20260901.7502a05 · 2026-09-01 · sha256 e914d018622cca02
role-edit git:20260901.7502a05A
Immutable. This exact content is served forever at /api/v1/blob/e914d018622cca02.
---
name: role-edit
description: Типизированно изменить права существующей роли 1С по логическому адресу, сохранив RLS, шаблоны и остальные права.
argument-hint: <sourceSet> <metadataPath> <operations>
allowed-tools:
- Read
- Glob
---
# /unica:role-edit — точечное редактирование прав роли
## MCP routing
- Preferred path: use MCP `unica` tool `unica.role.edit`.
- Выбирайте роль только через `sourceSet + metadataPath` вида `Role.<Имя>`.
Физический `Rights.xml` — внутренняя деталь разрешителя.
- Передавайте непустой упорядоченный массив `operations`; сейчас его закрытый
вариант — `setRight` с `objectName`, `right` и булевым `value`.
- Вызов по умолчанию строит preview. Передавайте `dryRun: false` только когда
пользователь явно попросил применить изменение.
- Читайте `metadataPath`, `changed`, `effects` по `operationIndex`,
`validation` и `diagnostics` из `structuredContent.data`. `stdout`, diff и
физический путь не являются контрактом результата.
- Не передавайте снятые top-level поля `RightsPath`, `Path`, `ObjectName`,
`Name` и `Value`; schema и parser обязаны их отклонить.
- `sourceSet` — имя набора исходников из `v8project.yaml`, а не константа.
Получите его через `unica.view {}`; `"main"` ниже — только пример.
## Вызов
```json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "unica.role.edit",
"arguments": {
"sourceSet": "main",
"metadataPath": "Role.Демо",
"operations": [
{
"op": "setRight",
"objectName": "Catalog.Демо",
"right": "Delete",
"value": false
}
],
"dryRun": true
}
}
}
```
Операции выполняются последовательно и публикуются одной транзакцией. Writer
проверяет право для вида `objectName` до изменения XML, сохраняет RLS,
templates, глобальные флаги, остальные объектные блоки и права. Повтор
эквивалентной операции даёт `changed: false` без записи.
Платформа хранит объектное право только со значением, отличным от умолчания
роли `setForNewObjects`. Поэтому `setRight` со значением умолчания (обычно
`false`) удаляет элемент права вместе с его RLS, а опустевший объектный блок —
целиком; если право уже отсутствует или объект не перечислен в роли, это
законный no-op. Право со значением, отличным от умолчания, записывается явно.
Ограничения, о которых стоит помнить:
- Writer не создаёт отсутствующий блок `object`: выдать роли право на объект,
который в `Rights.xml` ещё не настроен, нельзя — вызов отвечает
`object_not_listed`. Сначала перечислите объект в роли Конфигуратором или
`unica.role.compile`.
- Writer не моделирует зависимости прав платформы (например, «ввод по строке»
требует «просмотра»). Состояние, нарушающее матрицу зависимостей, платформа
молча дополнит при импорте — следите за парными правами сами.
Для `DataProcessor.*` операция `Use=false` применяет правило платформы:
удаляется весь объектный блок вместе с содержащимся в нём зависимым правом
`View`. Это не обобщается на другие виды объектов или права. Неподдерживаемое
сочетание завершается диагностикой без частичной мутации.