mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-18 15:45:52 +03:00
feat(role-edit): точечная правка существующей роли
Закрывает #43. Повторный role-compile перевыпускал UUID и переписывал Rights.xml целиком, поэтому добавить права существующей роли было нечем — оставалась ручная правка XML. Операции: add-rights, set-rights, remove-rights, deny-rights, set-rls, remove-rls, add/set/remove-template, modify-property, set-synonym, set-comment. Пакет через ;;, значение из файла через @путь, отказ до записи со всеми причинами разом, авто-вызов role-validate. Грамматика имён и пресетов — та же, что у role-compile: копии таблиц и валидаторов взяты побайтово, навык дописан в 16 семей реестра check-inline-drift. Правка держит инвариант «меняется только то, что просили»: узел встаёт на своё место по uuid объекта, право — по канону типа, набор замыкается по зависимостям, снятие и запрет идут каскадом в обратную сторону. Проверено раундтрипом через платформу — выход обоих портов совпал с выгрузкой 1С байт в байт, включая RLS с полями и двумя строками ограничений. 22 кейса на обоих портах, 17 снэпшотов приняты платформой. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FGkXwoXTuafcu1SXMsauFq
This commit is contained in:
co-authored by
Claude Opus 5
parent
ce37fe6e53
commit
7bbacd8ef4
@@ -0,0 +1,100 @@
|
||||
---
|
||||
name: role-edit
|
||||
description: Точечное редактирование существующей роли 1С. Используй когда нужно добавить, снять или запретить права, настроить RLS-ограничения и шаблоны, изменить свойства роли без потери прочих прав и UUID
|
||||
argument-hint: <RolePath> -Operation <op> -Value "<val>" | -DefinitionFile <json> [-NoValidate]
|
||||
allowed-tools:
|
||||
- Bash
|
||||
- Read
|
||||
- Write
|
||||
- Glob
|
||||
---
|
||||
|
||||
# /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
|
||||
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` — снять права<br>`Тип.Имя` — удалить объект целиком | Снять права |
|
||||
| `deny-rights` | `Тип.Имя: Право1, Право2` | Запретить права явно (`false`) |
|
||||
| `set-rls` | `Тип.Имя.Право: условие`<br>`Тип.Имя.Право[Поле1, Поле2]: условие` | Ограничение доступа к данным |
|
||||
| `remove-rls` | `Тип.Имя.Право` — снять все<br>`Тип.Имя.Право[Поле1]` — снять одну строку | Снять ограничение, право оставить |
|
||||
| `add-template` | `Имя(Параметры): условие` | Добавить шаблон ограничения |
|
||||
| `set-template` | то же | Заменить шаблон, а если его нет — добавить |
|
||||
| `remove-template` | `Имя(Параметры)` или `Имя` | Удалить шаблон |
|
||||
| `modify-property` | `setForNewObjects=true` | Глобальные флаги роли |
|
||||
| `set-synonym` | текст | Синоним роли (правит `Roles/Имя.xml`) |
|
||||
| `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"
|
||||
```
|
||||
|
||||
## Права
|
||||
|
||||
Имена объектов и прав — те же, что в `/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
|
||||
|
||||
Ограничения права — это список строк, как в таблице «Ограничения доступа к данным» редактора.
|
||||
Строка без списка полей действует на все прочие поля, строка со списком — только на них:
|
||||
|
||||
```powershell
|
||||
# Закрыть таблицу, но оставить ссылку живой: ссылочные поля без ограничения
|
||||
... -Operation set-rls -Value "Catalog.Товары.Read: ГДЕ ЛОЖЬ"
|
||||
... -Operation set-rls -Value "Catalog.Товары.Read[Ссылка, Код, Наименование]: "
|
||||
```
|
||||
|
||||
Строка с тем же набором полей заменяется, с другим — добавляется. Многострочное условие передавай
|
||||
файлом: `-Value "@условие.txt"` (в этом режиме `;;` считается текстом, а не разделителем пакета).
|
||||
Ограничение на невыданное право — ошибка: платформа такое молча игнорирует.
|
||||
|
||||
Ссылка на шаблон — `#ИмяШаблона("")`; `&` в условиях экранируется автоматически.
|
||||
|
||||
## Верификация
|
||||
|
||||
```
|
||||
/role-info <RightsPath> — сводка прав после правки
|
||||
/role-validate <RightsPath> — проверка корректности (запускается автоматически)
|
||||
```
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user