role-edit · git:20260810.8b513be · 2026-08-10 · sha256 5bf84af0dc57fa56

role-edit git:20260810.8b513beA

Immutable. This exact content is served forever at /api/v1/blob/5bf84af0dc57fa56.

---
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.project.map`; `"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`. Это не обобщается на другие виды объектов или права. Неподдерживаемое
сочетание завершается диагностикой без частичной мутации.