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:
Nick Shirokov
2026-09-13 17:39:12 +03:00
co-authored by Claude Opus 5
parent ce37fe6e53
commit 7bbacd8ef4
285 changed files with 21391 additions and 20 deletions
+16
View File
@@ -106,6 +106,22 @@ Roles/
└── Rights.xml # Права доступа (объекты, права, RLS)
```
## Правка существующей роли
`role-compile` описывает роль целиком и при повторном запуске перевыпускает UUID. Существующую
роль правит `role-edit`, у которого не JSON-описание роли, а операции над ней:
| Операция | Значение |
|----------|----------|
| `add-rights` / `set-rights` / `remove-rights` / `deny-rights` | `Тип.Имя: Право1, Право2` или `Тип.Имя: @пресет`; у `remove-rights` форма без двоеточия удаляет объект целиком |
| `set-rls` / `remove-rls` | `Тип.Имя.Право: условие`, поля — в скобках: `Тип.Имя.Право[Ref, Date]: ` |
| `add-template` / `set-template` / `remove-template` | `Имя(Параметры): условие` |
| `modify-property` | `setForNewObjects=true` |
| `set-synonym` / `set-comment` | текст |
Грамматика имён объектов, прав и пресетов — та же, что в `objects` выше. Пакет операций —
через `;;`, многострочное условие — из файла (`-Value "@условие.txt"`).
## См. также
- [Роли (Rights.xml)](1c-role-spec.md) — XML-формат прав роли, типы объектов, RLS