Files
cc-1c-skills/.claude/skills/role-compile/dsl-reference.md
T
Nick ShirokovandClaude Opus 5 9b0bff1386 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>
2026-08-13 20:12:15 +03:00

11 KiB
Raw Blame History

Role DSL — полная справка

Подробная справка по JSON DSL для /role-compile. Компактное описание — в SKILL.md.

Какие объекты можно писать в objects

Права в роли имеют ровно 27 типов. Тип вне этого списка — ошибка компиляции: роль не создаётся, файлы не пишутся.

Тип Права
Configuration Administration, DataAdministration, UpdateDataBaseConfiguration, ConfigurationExtensionsAdministration, ActiveUsers, EventLog, ExclusiveMode, ThinClient, ThickClient, WebClient, MobileClient, ExternalConnection, Automation, Output, SaveUserData, TechnicalSpecialistMode, InteractiveOpenExtDataProcessors, InteractiveOpenExtReports, AnalyticsSystemClient, CollaborationSystemInfoBaseRegistration, MainWindowModeNormal, MainWindowModeWorkplace, MainWindowModeEmbeddedWorkplace, MainWindowModeFullscreenWorkplace, MainWindowModeKiosk
Catalog, ChartOfCharacteristicTypes Read, Insert, Update, Delete, View, Edit, InputByString, Interactive* (Insert, SetDeletionMark, ClearDeletionMark, Delete, DeleteMarked), *PredefinedData, DataHistory
Document то же + Posting, UndoPosting, InteractivePosting, InteractivePostingRegular, InteractiveUndoPosting, InteractiveChangeOfPosted
ChartOfAccounts, ChartOfCalculationTypes, ExchangePlan Read, Insert, Update, Delete, View, Edit, InputByString, Interactive*, DataHistory (без InteractiveDeleteMarked у ChartOfAccounts)
BusinessProcess Read, Insert, Update, Delete, View, Edit, InputByString, Start, InteractiveInsert, InteractiveSetDeletionMark, InteractiveClearDeletionMark, InteractiveDelete, InteractiveActivate, InteractiveStart
Task то же, но вместо Start/InteractiveStart — Execute, InteractiveExecute
InformationRegister Read, Update, View, Edit, TotalsControl, DataHistory
AccumulationRegister, AccountingRegister Read, Update, View, Edit, TotalsControl
CalculationRegister Read, View
Constant Read, Update, View, Edit, DataHistory
DocumentJournal Read, View
Sequence Read, Update
DataProcessor, Report Use, View
WebService, HTTPService, IntegrationService Use
CommonForm, CommonCommand, Subsystem, FilterCriterion View
CommonAttribute View, Edit
SessionParameter Get, Set
ExternalDataSource Use, Administration, StandardAuthenticationChange, SessionStandardAuthenticationChange, SessionOSAuthenticationChange

Полные списки прав по каждому типу — в коде навыка (scripts/role-compile.ps1, таблица $knownRights); навык проверяет каждое имя права и отвергает несуществующее.

Вложенные объекты

Путь длиннее двух сегментов задаёт права на часть объекта. Вид вложенности — предпоследний сегмент, он определяет набор прав.

Вид Права
Attribute, StandardAttribute, TabularSection, StandardTabularSection, Dimension, Resource, AccountingFlag, ExtDimensionAccountingFlag, AddressingAttribute View, Edit
Command, вложенная Subsystem View
Operation (веб-сервис), Method (HTTP-сервис, под URLTemplate), IntegrationServiceChannel Use
Recalculation (регистр расчёта) Read, Update

Виды Operation, Method, IntegrationServiceChannel, Recalculation и виды внешнего источника допустимы только у своего типа-родителя. Графы журнала документов (DocumentJournal.Ж.Column.Г) собственных прав не имеют.

Примеры: Catalog.Контрагенты.Attribute.ИНН: View, Edit, Document.Реализация.TabularSection.Товары.Attribute.Цена: View, WebService.Обмен.Operation.Загрузить: Use, HTTPService.API.URLTemplate.Файлы.Method.get: Use.

Вложенные объекты внешнего источника данных

Виды Table, Cube, Function, Field, DimensionTable бывают только под ExternalDataSource.

Путь Права
ExternalDataSource.И.Table.Т Read, Insert, Update, Delete, View, Edit, InputByString, InteractiveInsert, InteractiveDelete
ExternalDataSource.И.Table.Т.Field.П View, Edit
ExternalDataSource.И.Cube.К Read, View
ExternalDataSource.И.Cube.К.Dimension.И, …Resource.Р View
ExternalDataSource.И.Cube.К.DimensionTable.Т Read, View
ExternalDataSource.И.Cube.К.DimensionTable.Т.Field.П View, Edit
ExternalDataSource.И.Function.Ф Use, View
…Table.Т.Command.К, …Cube.К.Command.К, …DimensionTable.Т.Command.К View

Типы объектов без прав в ролях

Права нельзя назначить на Enum, CommonModule, DefinedType, CommonPicture, CommonTemplate, Language, FunctionalOption, FunctionalOptionsParameter, EventSubscription, ScheduledJob, StyleItem, Style, SettingsStorage, XDTOPackage, WSReference, DocumentNumerator — в дереве редактора ролей этих типов нет.

Попытка — ошибка компиляции. Права на перечисления особенно опасны: конфигурация с таким блоком не загружается в информационную базу, конфигуратор зависает без сообщений.

Формат записи объектов

Массив objects принимает строки (shorthand) и объекты (полная форма).

{
  "name": "Document.Реализация",
  "preset": "view",
  "rights": { "Delete": false },
  "rls": { "Read": "#ДляОбъекта(\"\")" }
}
  • preset — базовый набор прав ("view", "edit")
  • rights — переопределения: dict {"Right": true/false} или массив ["Right1", "Right2"]
  • rls — RLS-ограничения: {"ИмяПрава": "текст условия"}

Русские имена типов и прав тоже принимаются (Справочник.Контрагенты: Чтение), каноничная форма — английская.

Пресеты — подробные таблицы

Пресеты обозначаются @ в строковом формате. В объектной форме ключ preset без @.

@view — просмотр

Тип объекта Права
Catalog, ExchangePlan, Document, ChartOfAccounts, ChartOfCharacteristicTypes, ChartOfCalculationTypes, BusinessProcess, Task Read, View, InputByString
InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, Constant, DocumentJournal Read, View
Sequence Read
CommonForm, CommonCommand, Subsystem, FilterCriterion, CommonAttribute View
DataProcessor, Report Use, View
SessionParameter Get
Configuration ThinClient, WebClient, Output, SaveUserData, MainWindowModeNormal

@edit — полное редактирование

Тип объекта Права
Catalog, ExchangePlan, ChartOfAccounts, ChartOfCharacteristicTypes, ChartOfCalculationTypes Read, Insert, Update, Delete, View, Edit, InputByString, InteractiveInsert, InteractiveSetDeletionMark, InteractiveClearDeletionMark
Document Read, Insert, Update, Delete, View, Edit, InputByString, Posting, UndoPosting, InteractiveInsert, InteractiveSetDeletionMark, InteractiveClearDeletionMark, InteractivePosting, InteractivePostingRegular, InteractiveUndoPosting, InteractiveChangeOfPosted
BusinessProcess Read, Insert, Update, Delete, View, Edit, InputByString, Start, InteractiveInsert, InteractiveSetDeletionMark, InteractiveClearDeletionMark, InteractiveActivate, InteractiveStart
Task Read, Insert, Update, Delete, View, Edit, InputByString, Execute, InteractiveInsert, InteractiveSetDeletionMark, InteractiveClearDeletionMark, InteractiveActivate, InteractiveExecute
InformationRegister, AccumulationRegister, AccountingRegister, Constant Read, Update, View, Edit
DocumentJournal Read, View
Sequence Read, Update
SessionParameter Get, Set
CommonAttribute View, Edit

Для сервисов (WebService, HTTPService, IntegrationService) и внешних источников данных пресеты не определены — задавай права явно: "WebService.Имя: Use".

Шаблоны ограничений (RLS templates)

"templates": [
  {
    "name": "ДляОбъекта(Модификатор)",
    "condition": "// текст шаблона\nГДЕ 1=1\n&Модификатор"
  }
]
  • & в условии автоматически экранируется в &amp; в XML
  • Ссылка на шаблон в rls: "#ИмяШаблона(\"параметры\")" — начинается с #
  • Параметры шаблона можно передавать пустыми: #ДляОбъекта("")

Примеры

Роль с RLS

{
  "name": "ЧтениеДокументовПоОрганизации",
  "synonym": "Чтение документов (ограничение по организации)",
  "objects": [
    "Catalog.Организации: @view",
    {
      "name": "Document.РеализацияТоваровУслуг",
      "preset": "view",
      "rls": {
        "Read": "#ДляОбъекта(\"\")"
      }
    }
  ],
  "templates": [
    {
      "name": "ДляОбъекта(Модификатор)",
      "condition": "ГДЕ Организация = &ТекущаяОрганизация"
    }
  ]
}

Роль с переопределением прав из пресета

{
  "name": "ОграниченноеРедактирование",
  "synonym": "Редактирование без удаления",
  "objects": [
    {
      "name": "Catalog.Контрагенты",
      "preset": "edit",
      "rights": { "Delete": false }
    }
  ]
}

Роль с правами на части объекта

{
  "name": "МенеджерБезЦен",
  "synonym": "Менеджер без доступа к ценам",
  "objects": [
    "Catalog.Номенклатура: @view",
    { "name": "Catalog.Номенклатура.Attribute.Цена", "rights": { "View": false, "Edit": false } }
  ]
}