--- name: role-edit description: Точечное редактирование существующей роли 1С. Используй когда нужно добавить, снять или запретить права, настроить RLS-ограничения и шаблоны, изменить свойства роли без потери прочих прав и UUID argument-hint: -Operation -Value "" | -DefinitionFile [-NoValidate] allowed-tools: - Bash - Read - Write - Glob --- # /role-edit — точечное редактирование роли 1С Меняет права существующей роли на месте: UUID, прочие права, RLS и шаблоны сохраняются. Создание новой роли — `/role-compile`. ## Параметры и команда | Параметр | Описание | |----------|----------| | `RolePath` | Каталог роли, `Roles/Имя.xml` или `Roles/Имя/Ext/Rights.xml` | | `Operation` | Одна операция из таблицы ниже | | `Value` | Значение операции; несколько значений — через `;;` | | `DefinitionFile` | JSON-массив операций (альтернатива `Operation`) — так задают несколько разных операций | | `NoValidate` | Не запускать `role-validate` после правки | ```powershell python ".opencode/skills/role-edit/scripts/role-edit.py" -RolePath "<роль>" -Operation -Value "<значение>" ``` Операции применяются в том порядке, в котором перечислены. ## Операции | Операция | Формат `Value` | Описание | |----------|----------------|----------| | `add-rights` | `Тип.Имя: Право1, Право2` или `Тип.Имя: @пресет` | Добавить права, прежние сохранить | | `set-rights` | то же | Заменить набор прав объекта целиком | | `remove-rights` | `Тип.Имя: Право1, Право2` — снять права
`Тип.Имя` — удалить объект целиком | Снять права | | `deny-rights` | `Тип.Имя: Право1, Право2` | Закрыть реквизит или ТЧ, которые иначе наследуют права объекта | | `set-rls` | `Тип.Имя.Право: условие`
`Тип.Имя.Право[Поле1, Поле2]: условие` | Ограничение доступа к данным | | `remove-rls` | `Тип.Имя.Право` — снять все
`Тип.Имя.Право[Поле1]` — снять одну строку | Снять ограничение, право оставить | | `add-template` | `Имя(Параметры): условие` | Добавить шаблон ограничения | | `set-template` | то же | Заменить шаблон, а если его нет — добавить | | `remove-template` | `Имя(Параметры)` или `Имя` | Удалить шаблон | | `modify-property` | `setForNewObjects=true`
`setForAttributesByDefault=false`
`independentRightsOfChildObjects=true` | Глобальные флаги роли | | `set-synonym` | текст | Синоним роли | | `set-comment` | текст | Комментарий роли | ## Быстрые примеры ```powershell # Добавить права нового регистра, ничего не потеряв ... -RolePath "src/Roles/Менеджер" -Operation add-rights -Value "InformationRegister.Цены: Read, Update" # Пресет и несколько объектов в одном вызове ... -RolePath "src/Roles/Менеджер" -Operation add-rights -Value "Catalog.Товары: @view ;; Document.Заказ: @edit" # Снять права; объект без разрешающих прав удаляется целиком ... -RolePath "src/Roles/Менеджер" -Operation remove-rights -Value "Document.Заказ: Delete" # Закрыть реквизит от роли ... -RolePath "src/Roles/Менеджер" -Operation deny-rights -Value "Catalog.Товары.Attribute.Цена: View" ``` Несколько разных операций — списком в файле: ```json [ { "operation": "add-rights", "value": "Catalog.Товары: @view" }, { "operation": "set-rls", "value": "Catalog.Товары.Read: #ПоОрганизации(\"\")" } ] ``` ```powershell ... -RolePath "src/Roles/Менеджер" -DefinitionFile "операции.json" ``` ## Права Имена объектов и прав — те же, что в `/role-compile`: `Catalog`, `Read`, пресеты `@view` и `@edit`, вложенные пути (`Catalog.Контрагенты.Attribute.ИНН: View, Edit`), короткая запись сервиса (`HTTPService.ЭДО: Use` раскрывается по всем методам шаблонов URL). `remove-rights` и `deny-rights` задевают больше перечисленного: уходят и права, которым снятое нужно (сняли `Read` — уйдут `Update`, `View`, `Edit`). Снятое каскадом перечисляется в выводе. Ошибка в значении — отказ до записи, файл не меняется. Полные таблицы «тип → права» и виды вложенности — в справке `/role-compile`. ## RLS Ограничения права — это список строк, как в таблице «Ограничения доступа к данным» редактора. Строка без списка полей действует на все прочие поля, строка со списком — только на них. Типовой приём: закрыть данные целиком, но оставить поля представления ссылки открытыми, иначе ссылки на объект превратятся в «объект не найден»: ```powershell ... -Operation set-rls -Value "Catalog.Товары.Read: ГДЕ ЛОЖЬ" ... -Operation set-rls -Value "Catalog.Товары.Read[Ссылка, Код, Наименование]: " ``` Строка с тем же набором полей заменяется, с другим — добавляется. Право должно быть уже выдано: ограничение без права платформа игнорирует, поэтому навык откажет. Ссылка на шаблон — `#ИмяШаблона("")`; `&` в условиях экранируется автоматически. ## Значение из файла Вместо текста можно указать `@путь` — условие RLS, тело шаблона, синоним и комментарий берутся из файла. Относительный путь ищется рядом с `DefinitionFile`, затем в текущем каталоге. Разделитель `;;` внутри файла остаётся обычным текстом. ```powershell ... -Operation set-rls -Value "Catalog.Товары.Read: @условие.txt" ... -Operation add-template -Value "ПоОрганизации(Мод): @условие.txt" ... -Operation set-comment -Value "@комментарий.txt" ``` ## Верификация ``` /role-info — сводка прав после правки /role-validate — проверка корректности (запускается автоматически) ```