fix(role-compile,role-validate): закрытый белый список типов и прав вместо предупреждений

Неизвестный тип объекта обрабатывался веткой «warning» и всё равно попадал в
Rights.xml: и генератор, и валидатор рапортовали успех. Блок прав на тип, который
прав не имеет, платформа не отвергает — конфигурация с правами на перечисление не
загружается в информационную базу, конфигуратор зависает без сообщений.

Белый список — дерево редактора ролей: 27 типов (добавлен ExternalDataSource,
которого не было ни в одной таблице) плюс таблица видов вложенности с наборами прав
и привязкой вида к типу-родителю. Значения сняты с корпуса (acc/erp/ut/unf, ~2750
ролей) и с выгрузок роли со всеми проставленными правами — для внешнего источника
данных и перерасчёта регистра расчёта, которых в корпусе нет.

- role-compile: отказ ДО записи файлов, все причины разом, exit 1; ни файлов роли,
  ни записи в Configuration.xml. Русские алиасы для типов без прав — ради внятного
  отказа, а не ради генерации.
- role-validate: те же случаи — ошибка вместо предупреждения.
- Побочно снято 424 ложных предупреждения на корпусе: права Use у операций
  веб-сервисов и методов HTTP-сервисов считались недопустимыми для вложенных объектов.
- Проверка имён прав и вложенных путей больше не пропускает мусор: неизвестное право
  и путь вида Enum.Х.Attribute.Y раньше не проверялись вовсе.
- docs/1c-role-spec.md: ExternalDataSource ошибочно числился типом без прав.
- dsl-reference.md переписан под «что можно написать» (тип → права, виды
  вложенности) вместо таблиц прощающего ввода.

Тесты: expect.filesAbsent в раннере; новые кейсы на отказ и на вложенные объекты.
Починены кейсы, которые ничего не проверяли: три задавали права одной строкой
"Read View" (навык писал в эталон несуществующее право), valid-role собирал роль
неизвестным ключом и валидировал пустую, bad-root проходил на «файл не найден».

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-13 20:12:15 +03:00
co-authored by Claude Opus 5
parent 30c8901615
commit 9b0bff1386
35 changed files with 1646 additions and 330 deletions
+46 -7
View File
@@ -542,18 +542,44 @@ Subsystem.Администрирование.Subsystem.Пользователи
| `SessionParameter` | Get, Set |
| `CommonAttribute` | View, Edit |
#### ExternalDataSource
Источник ошибки в прежних редакциях спецификации: внешние источники данных права **имеют**
узел «Внешние источники данных» есть в дереве редактора ролей. Значения ниже сняты с выгрузки
роли со всеми проставленными правами (8.3.25).
| Объект | Права |
|--------|-------|
| `ExternalDataSource.И` | Use, Administration, StandardAuthenticationChange, SessionStandardAuthenticationChange, SessionOSAuthenticationChange |
| `ExternalDataSource.И.Table.Т` | Read, Insert, Update, Delete, View, Edit, InputByString, InteractiveInsert, InteractiveDelete |
| `ExternalDataSource.И.Table.Т.Field.П` | View, Edit |
| `ExternalDataSource.И.Cube.К` | Read, View |
| `ExternalDataSource.И.Cube.К.Dimension.И` | View |
| `ExternalDataSource.И.Cube.К.Resource.Р` | View |
| `ExternalDataSource.И.Cube.К.DimensionTable.Т` | Read, View |
| `ExternalDataSource.И.Cube.К.DimensionTable.Т.Field.П` | View, Edit |
| `ExternalDataSource.И.Function.Ф` | Use, View |
| `…Table.Т.Command.К`, `…Cube.К.Command.К`, `…DimensionTable.Т.Command.К` | View |
#### Типы объектов БЕЗ прав в ролях
Следующие типы не фигурируют в Rights.xml (права не применимы или управляются иначе):
Следующие типы не фигурируют в Rights.xml — в дереве редактора ролей их нет:
- `Enum` (перечисления)
- `FunctionalOption`
- `DefinedType`
- `Enum` (перечисления) — блок прав на перечисление приводит к зависанию загрузки
конфигурации в информационную базу: конфигуратор не завершается и не выдаёт сообщений
- `CommonModule`
- `DefinedType`
- `CommonPicture`
- `CommonTemplate`
- `Language`
- `FunctionalOption`, `FunctionalOptionsParameter`
- `EventSubscription`
- `ScheduledJob`
- `StyleItem`, `Style`
- `SettingsStorage`
- `ExternalDataSource`
- `XDTOPackage`
- `WSReference`
- `DocumentNumerator`
---
@@ -646,8 +672,21 @@ Subsystem.Администрирование.Subsystem.Пользователи
| `TabularSection.*.Attribute` | (все с TabularSection) | View, Edit |
| `Dimension` | InformationRegister, AccumulationRegister, AccountingRegister | View, Edit |
| `Resource` | InformationRegister, AccumulationRegister, AccountingRegister | View, Edit |
| `Command` | Catalog, Document, DataProcessor, Report, *Register, DocumentJournal, ExchangePlan, BusinessProcess, Task | View |
| `AddressingAttribute` | Task | View, Edit |
| `Command` | Catalog, Document, DataProcessor, Report, *Register, DocumentJournal, ExchangePlan, BusinessProcess, Task, ExternalDataSource (Table/Cube/DimensionTable) | View |
| `AddressingAttribute` | Task, BusinessProcess | View, Edit |
| `StandardTabularSection` | Catalog, Document, ChartOf* | View, Edit |
| `AccountingFlag`, `ExtDimensionAccountingFlag` | ChartOfAccounts | View, Edit |
| `Subsystem` | Subsystem (вложенная) | View |
| `Operation` | WebService | Use |
| `URLTemplate.*.Method` | HTTPService | Use |
| `IntegrationServiceChannel` | IntegrationService | Use |
| `Recalculation` | CalculationRegister | Read, Update |
| `Column` (графа журнала) | — | прав не имеет |
| `Table`, `Cube`, `Function`, `Field`, `DimensionTable` | только ExternalDataSource | см. раздел ExternalDataSource |
Виды, встречающиеся в выгрузках типовых конфигураций, сверены с корпусом
(`acc`, `erp`, `ut`, `unf` — ~2750 ролей); внешние источники данных — с выгрузкой роли,
где права проставлены по всему дереву.
---