Skip to content
Back to skills

Role Compile

ASecurity

Создание роли 1С из описания прав. Используй когда нужно создать новую роль с набором прав на объекты

  • 213 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 11, 2026
toolsbash

Works with

  • cli
  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 3, 2026

npx -y skills add IngvarConsulting/unica --skill role-compile --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Role Compile?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Role Compile
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ingvarconsulting-role-compile/badge)](https://www.skillsdirectory.com/skills/ingvarconsulting-role-compile)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: role-compile
description: Создание роли 1С из описания прав. Используй когда нужно создать новую роль с набором прав на объекты
argument-hint: <JsonPath> <OutputDir>
allowed-tools:
  - Bash
  - Read
  - Write
  - Glob
---

# /role-compile — генерация роли 1С из JSON DSL

## MCP routing

- Preferred path: use MCP `unica` tool `unica.apply` с операциями
  `role.create` и `right.set`.
- Do not call internal MCP/CLI adapters directly. They are hidden behind
  `unica` and synchronized by the orchestrator.
- **Создание метит в корень конфигурации:** `args.at` — это
  `<набор>:Configuration`, имя роли лежит в `values.name`. Адреса, которого
  ещё нет, назвать нельзя. Дальнейшие права метят уже в саму роль.
- Сначала вызови `unica.apply` с `at` и `ops`: это план без записи.
  Когда пользователь поручил внести эту правку, вызови `unica.apply` только
  с `executionToken` из `data.executionToken` успешного плана.
- Роль и все её права публикуются одной транзакцией: либо роль появляется
  настроенной, либо не появляется вовсе.
- Каталогов выгрузки и путей к `Rights.xml` тут нет — их место занял адрес.

### Пресеты разворачивает скилл, а не инструмент

`right.set` принимает одно право: `values` с `object`, `right` и хотя бы одним
из `value` и `rls`. Пресета `@view` инструмент не знает — разверни его сам по
таблице ниже в набор операций. Так видно, какие именно права выданы, и
предпросмотр показывает их поимённо, а не имя пресета.

Объект, ещё не перечисленный в роли, добавляется сам: заводить его отдельно не
нужно.

### Чего на канонической поверхности нет

**Шаблоны RLS.** Операции, создающей `restrictionTemplate`, в реестре нет.
`right.set` их сохраняет — существующие шаблоны при правке прав не страдают, —
но объявить новый нечем. Условие ограничения пиши прямо в `values.rls`; если
нужен именно переиспользуемый шаблон, скажи о пробеле контракта, а не
подставляй ссылку на шаблон, которого не создашь.

## JSON DSL

### Структура

```json
{ "name": "ИмяРоли", "synonym": "Отображаемое имя", "objects": [...], "templates": [...] }
```

Необязательные: `comment` (""), `setForNewObjects` (false), `setForAttributesByDefault` (true), `independentRightsOfChildObjects` (false).

### Shorthand-строки и объектная форма

```json
"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

```json
"templates": [{"name": "ДляОбъекта(Мод)", "condition": "ГДЕ Организация = &ТекОрг"}]
```

Ссылка в `rls`: `"#ДляОбъекта(\"\")"`. Символ `&` автоматически экранируется в XML.

## Примеры

### Простая роль

```json
{
  "name": "ЧтениеНоменклатуры", "synonym": "Чтение номенклатуры",
  "objects": ["Catalog.Номенклатура: @view", "Catalog.Контрагенты: @view", "DataProcessor.Загрузка: @view"]
}
```

### Роль с RLS

```json
{
  "name": "ЧтениеДокументовПоОрганизации",
  "synonym": "Чтение документов (ограничение по организации)",
  "objects": [
    "Catalog.Организации: @view",
    {"name": "Document.РеализацияТоваровУслуг", "preset": "view", "rls": {"Read": "#ДляОбъекта(\"\")"}}
  ],
  "templates": [{"name": "ДляОбъекта(Модификатор)", "condition": "ГДЕ Организация = &ТекущаяОрганизация"}]
}
```

Подробные таблицы пресетов, русских синонимов и дополнительные примеры — в `dsl-reference.md`.

## Порядок

1. Имя набора: `unica.view {}`.
2. Разверни пресеты в явные права по таблице выше.
3. Предпросмотр: `unica.apply` с `at` и `ops`, `at` в корень конфигурации.
4. Применение: вызов только с `executionToken` из `data.executionToken` успешного плана.
5. Проверка: `unica.check {at}` уже по адресу роли.

## Примеры вызова

### Роль с правами одним пакетом

```json
{
  "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}
          }
        }
      ]
    }
  }
}
```

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

Условие пишется прямо в `values.rls`: шаблон объявить нечем.

Сначала получи план этого изменения:

```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": "ГДЕ Организация = &ТекущаяОрганизация"
            }
          }
        }
      ]
    }
  }
}
```

Для исполнения передай `data.executionToken` из этого успешного плана:

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "executionToken": "<data.executionToken из успешного плана>"
    }
  }
}
```

## Верификация

### Проверка корректности XML, прав и RLS

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.check",
    "arguments": {
      "at": "<набор>:Role.<ИмяРоли>"
    }
  }
}
```

### Сводка структуры роли

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.view",
    "arguments": {
      "at": "<набор>:Role.<ИмяРоли>"
    }
  }
}
```

Files in this skill

  • SKILL.md5.5 KB
  • dsl-reference.md12.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.