Было неинтуитивно и вдобавок молча портило файл: `@условие.txt` целиком заменял -Value, поэтому в файле должен был лежать ещё и адрес, а естественная форма "Catalog.Товары.Read: @условие.txt" записывала в условие литерал "@условие.txt" — без единого предупреждения. Теперь файл читается там, где стоит текст: условие RLS и тело шаблона — после двоеточия, синоним и комментарий — как всё значение. Адрес остаётся в команде. Пакет делится по ;; ДО чтения файла, поэтому ;; внутри условия больше не разделитель — прежний костыль с отключением пакета убран. Отсутствие файла — ошибка до записи. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FGkXwoXTuafcu1SXMsauFq
7.1 KiB
name, description, argument-hint, allowed-tools
| name | description | argument-hint | allowed-tools | ||||
|---|---|---|---|---|---|---|---|
| role-edit | Точечное редактирование существующей роли 1С. Используй когда нужно добавить, снять или запретить права, настроить RLS-ограничения и шаблоны, изменить свойства роли без потери прочих прав и UUID | <RolePath> -Operation <op> -Value "<val>" | -DefinitionFile <json> [-NoValidate] |
|
/role-edit — точечное редактирование роли 1С
Меняет права существующей роли на месте: UUID, прочие права, RLS и шаблоны сохраняются.
Создание новой роли — /role-compile.
Параметры и команда
| Параметр | Описание |
|---|---|
RolePath |
Каталог роли, Roles/Имя.xml или Roles/Имя/Ext/Rights.xml |
Operation |
Операция из таблицы ниже (альтернатива DefinitionFile) |
Value |
Значение операции. Пакет через ;;. Текст можно взять из файла: @путь в позиции значения |
DefinitionFile |
JSON-массив операций [{ "operation": "...", "value": "..." }] |
NoValidate |
Не запускать role-validate после правки |
powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-edit.ps1" -RolePath "<роль>" -Operation <op> -Value "<значение>"
Операции
| Операция | Формат Value |
Описание |
|---|---|---|
add-rights |
Тип.Имя: Право1, Право2 или Тип.Имя: @пресет |
Добавить права, прежние сохранить |
set-rights |
то же | Заменить набор прав объекта целиком |
remove-rights |
Тип.Имя: Право1, Право2 — снять праваТип.Имя — удалить объект целиком |
Снять права |
deny-rights |
Тип.Имя: Право1, Право2 |
Запретить права явно (false) |
set-rls |
Тип.Имя.Право: условиеТип.Имя.Право[Поле1, Поле2]: условие |
Ограничение доступа к данным |
remove-rls |
Тип.Имя.Право — снять всеТип.Имя.Право[Поле1] — снять одну строку |
Снять ограничение, право оставить |
add-template |
Имя(Параметры): условие |
Добавить шаблон ограничения |
set-template |
то же | Заменить шаблон, а если его нет — добавить |
remove-template |
Имя(Параметры) или Имя |
Удалить шаблон |
modify-property |
setForNewObjects=true |
Глобальные флаги роли |
set-synonym |
текст | Синоним роли (правит Roles/Имя.xml) |
set-comment |
текст | Комментарий роли |
Быстрые примеры
# Добавить права нового регистра, ничего не потеряв
... -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"
Права
Имена объектов и прав — те же, что в /role-compile: английские (Catalog, Read) или русские
(Справочник, Чтение), пресеты @view и @edit, вложенные пути
(Catalog.Контрагенты.Attribute.ИНН: View, Edit), короткая запись сервиса
(HTTPService.ЭДО: Use раскрывается по всем методам шаблонов URL).
Набор прав дополняется до замыкания: Edit тянет Read, Update, View; View у обработки и
отчёта — Use. Снятие работает в обратную сторону: снимаешь Read — уходят и права, которые его
требуют. Дописанное и снятое каскадом перечисляется в выводе.
Тип или имя права вне допустимого списка — отказ: файл не меняется, ошибки печатаются все разом.
Полные таблицы «тип → права» и виды вложенности — в role-compile/dsl-reference.md.
RLS
Ограничения права — это список строк, как в таблице «Ограничения доступа к данным» редактора. Строка без списка полей действует на все прочие поля, строка со списком — только на них:
# Закрыть таблицу, но оставить ссылку живой: ссылочные поля без ограничения
... -Operation set-rls -Value "Catalog.Товары.Read: ГДЕ ЛОЖЬ"
... -Operation set-rls -Value "Catalog.Товары.Read[Ссылка, Код, Наименование]: "
Строка с тем же набором полей заменяется, с другим — добавляется. Ограничение на невыданное право — ошибка: платформа такое молча игнорирует.
Длинное условие держи в файле — адрес остаётся в команде, из файла приходит только текст:
... -Operation set-rls -Value "Catalog.Товары.Read: @условие.txt"
... -Operation add-template -Value "ПоОрганизации(Мод): @условие.txt"
Так же берётся текст у set-synonym и set-comment: -Value "@текст.txt". Разделитель пакета
;; внутри файла остаётся обычным текстом.
Ссылка на шаблон — #ИмяШаблона(""); & в условиях экранируется автоматически.
Верификация
/role-info <RightsPath> — сводка прав после правки
/role-validate <RightsPath> — проверка корректности (запускается автоматически)