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
+6
View File
@@ -8,6 +8,7 @@
|-------|-----------|----------|
| `/role-info` | `<RightsPath>` | Компактная сводка прав: объекты по типам, только разрешённые, RLS, шаблоны |
| `/role-compile` | `<JsonPath> <RolesDir>` | Генерация роли из JSON DSL: метаданные + Rights.xml, UUID автоматически |
| `/role-edit` | `<RolePath> -Operation <op> -Value <val>` | Точечная правка существующей роли: права, RLS, шаблоны, свойства — UUID и прочие права сохраняются |
| `/role-validate` | `<RightsPath> [MetadataPath]` | Валидация структурной корректности: XML, namespace, права, RLS, шаблоны |
## Рабочий цикл
@@ -15,6 +16,8 @@
```
Описание прав (текст) → JSON DSL → /role-compile → XML-исходники → /role-validate
→ /role-info
Правка существующей роли: XML-исходники → /role-edit → /role-validate
```
1. Claude формирует JSON-определение роли (с пресетами или явными правами)
@@ -22,6 +25,9 @@
3. `/role-validate` проверяет корректность сгенерированного XML
4. `/role-info` выводит компактную сводку для визуальной проверки
Существующую роль повторной компиляцией не правят: `role-compile` перевыпускает UUID и
переписывает `Rights.xml` целиком. Для доработки — `/role-edit`.
## JSON DSL — компактный формат
Роли описываются в JSON с двумя уровнями детализации: