# Role Edit

> Типизированно изменить права существующей роли 1С по логическому адресу, сохранив RLS, шаблоны и остальные права.

- Skill: `ingvarconsulting/role-edit` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ingvarconsulting/role-edit`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ingvarconsulting/role-edit/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: IngvarConsulting (https://skillmd.com/u/ingvarconsulting)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/ingvarconsulting/role-edit

---


# /unica:role-edit — точечное редактирование прав роли

## MCP routing

- Preferred path: use MCP `unica` tool `unica.apply` с операцией `right.set`.
- Роль называет адрес: `args.at` вида `<набор>:Role.<Имя>`. Физический
  `Rights.xml` — внутренняя деталь; наружу путь отдаёт только аварийный
  `unica.resolve`, и в обычном ходе работы он не нужен.
- Имя набора даёт `unica.view {}`, адрес роли по имени —
  `unica.search {corpus: "names", kind: "Role"}`. `"main"` ниже только пример.
- Всегда сначала `dryRun: true`. Применяй `dryRun: false` только когда
  пользователь явно попросил внести именно эту правку, и только с `ifRev` из
  предпросмотра.
- Читай из ответа `changed`, `effects` по порядку операций и диагностики.
  Физический путь и diff контрактом результата не являются.

## Операция `right.set`

`args.values` принимает `object`, `right` и хотя бы одно из `value` и `rls`:

| Поле | Что задаёт |
|---|---|
| `object` | Объект метаданных, например `Catalog.Демо` |
| `right` | Имя права, например `Delete` |
| `value` | Булево значение права |
| `rls` | Условие ограничения записей |

Операции выполняются по порядку и публикуются одной транзакцией: либо все,
либо ни одной. Повтор эквивалентной операции даёт `changed: false` без записи.

**Объект, ещё не перечисленный в роли, добавляется сам.** Прежний писатель
отказывал `object_not_listed` и требовал сперва внести объект Конфигуратором;
канонический `right.set` заводит объектный блок вместе с правом.

Платформа хранит объектное право только со значением, отличным от умолчания
роли `setForNewObjects`. Поэтому `right.set` со значением умолчания (обычно
`false`) удаляет элемент права вместе с его RLS, а опустевший объектный блок —
целиком; если право уже отсутствует, это законный no-op.

Зависимости прав платформы писатель не моделирует: «ввод по строке» требует
«просмотра», и состояние, нарушающее матрицу зависимостей, платформа молча
дополнит при импорте. Следи за парными правами сам.

Для `DataProcessor.*` значение `Use=false` применяет правило платформы:
удаляется весь объектный блок вместе с зависимым правом `View`. На другие виды
объектов и права это не обобщается.

## MCP examples

### Предпросмотр

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "at": "main:Role.Демо",
      "ops": [
        {
          "op": "right.set",
          "args": {
            "at": "main:Role.Демо",
            "values": {
              "object": "Catalog.Демо",
              "right": "Delete",
              "value": false
            }
          }
        }
      ],
      "dryRun": true
    }
  }
}
```

### Право с ограничением записей

```json
{
  "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 из предпросмотра>"
    }
  }
}
```

