diff --git a/.claude/skills/role-compile/SKILL.md b/.claude/skills/role-compile/SKILL.md index 27b62771..accf8f63 100644 --- a/.claude/skills/role-compile/SKILL.md +++ b/.claude/skills/role-compile/SKILL.md @@ -11,267 +11,75 @@ allowed-tools: # /role-compile — генерация роли 1С из JSON DSL -Принимает компактное JSON-определение роли и генерирует два файла: метаданные (`Roles/Имя.xml`) и права (`Roles/Имя/Ext/Rights.xml`). UUID генерируется автоматически. +Принимает JSON-определение роли → генерирует `Roles/Имя.xml` (метаданные) и `Roles/Имя/Ext/Rights.xml` (права). UUID автоматически. -## Использование +## Параметры и команда -``` -/role-compile -``` - -## Параметры - -| Параметр | Обязательный | Описание | -|----------|:------------:|----------| -| JsonPath | да | Путь к JSON-определению роли | -| RolesDir | да | Каталог `Roles/` в исходниках конфигурации | - -## Команда +| Параметр | Описание | +|----------|----------| +| `JsonPath` | Путь к JSON-определению роли | +| `RolesDir` | Каталог `Roles/` в исходниках конфигурации | ```powershell powershell.exe -NoProfile -File .claude\skills\role-compile\scripts\role-compile.ps1 -JsonPath "" -OutputDir "" ``` -## Выходные файлы - -``` -RolesDir/ - ИмяРоли.xml ← метаданные (uuid, имя, синоним) - ИмяРоли/ - Ext/ - Rights.xml ← определение прав -``` - После генерации: добавить `ИмяРоли` в `` файла `Configuration.xml`. -## JSON DSL — справка +## JSON DSL -### Структура верхнего уровня +### Структура ```json -{ - "name": "ИмяРоли", - "synonym": "Отображаемое имя роли", - "comment": "", - "setForNewObjects": false, - "setForAttributesByDefault": true, - "independentRightsOfChildObjects": false, - "objects": [ ... ], - "templates": [ ... ] -} +{ "name": "ИмяРоли", "synonym": "Отображаемое имя", "objects": [...], "templates": [...] } ``` -- `name` — программное имя роли (обязательно) -- `synonym` — отображаемое имя (по умолчанию = name) -- `comment` — комментарий (по умолчанию пусто) -- Глобальные флаги — по умолчанию `false`, `true`, `false` +Необязательные: `comment` (""), `setForNewObjects` (false), `setForAttributesByDefault` (true), `independentRightsOfChildObjects` (false). -### Объекты: два формата +### Shorthand-строки и объектная форма -Массив `objects` принимает строки (shorthand) и объекты (полная форма). - -#### Строковый shorthand - -``` -"ОбъектМетаданных: @пресет" -"ОбъектМетаданных: Право1, Право2" -``` - -Примеры: ```json "objects": [ "Catalog.Номенклатура: @view", "Document.Реализация: @edit", "InformationRegister.Цены: Read, Update", - "DataProcessor.Загрузка: @use" + { "name": "Document.Продажа", "preset": "view", "rights": {"Delete": false}, "rls": {"Read": "#Шаблон(\"\")"} } ] ``` -#### Объектная форма (для RLS и переопределений) +- Shorthand: `"Тип.Имя: @пресет"` или `"Тип.Имя: Право1, Право2"` +- Объектная форма: `preset` + `rights` (переопределения) + `rls` (ограничения) -```json -{ - "name": "Document.Реализация", - "preset": "view", - "rights": { "Delete": false }, - "rls": { "Read": "#ДляОбъекта(\"\")" } -} -``` +### Пресеты -- `preset` — базовый набор прав (`"view"`, `"edit"`, `"use"`) -- `rights` — переопределения: dict `{"Right": true/false}` или массив `["Right1", "Right2"]` -- `rls` — RLS-ограничения: `{"ИмяПрава": "текст условия"}` +| Пресет | Действие | +|--------|----------| +| `@view` | Просмотр — Read, View (+InputByString для справочников/документов) | +| `@edit` | Полное редактирование — CRUD + Interactive* + Posting (документы) | +| `@use` | Использование — Use, View (обработки/отчёты/сервисы) | -### Пресеты (`@view`, `@edit`, `@use`) - -Пресеты обозначаются `@` в строковом формате. В объектной форме ключ `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 | -| 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 | - -#### `@use` — использование - -| Тип объекта | Права | -|-------------|-------| -| DataProcessor, Report | Use, View | -| CommonForm, CommonCommand, Subsystem | View | -| WebService, HTTPService, IntegrationService | Use | - -Если пресет не определён для типа объекта — предупреждение с подсказкой доступных. +`@` обязателен в shorthand. В объектной форме — `"preset": "view"` без `@`. ### Русские синонимы -Скрипт автоматически транслирует русские имена в английские. Можно смешивать: `"Справочник.Контрагенты: Чтение, View"` — работает. +Поддерживаются русские типы (`Справочник`→Catalog, `Документ`→Document) и права (`Чтение`→Read, `Просмотр`→View). Смешивание допустимо: `"Справочник.Контрагенты: Чтение, View"`. -**Типы объектов:** - -| Русский | English | -|---------|---------| -| `Справочник` | Catalog | -| `Документ` | Document | -| `РегистрСведений` | InformationRegister | -| `РегистрНакопления` | AccumulationRegister | -| `РегистрБухгалтерии` | AccountingRegister | -| `РегистрРасчета` | CalculationRegister | -| `Константа` | Constant | -| `ПланСчетов` | ChartOfAccounts | -| `ПланВидовХарактеристик` | ChartOfCharacteristicTypes | -| `ПланВидовРасчета` | ChartOfCalculationTypes | -| `ПланОбмена` | ExchangePlan | -| `БизнесПроцесс` | BusinessProcess | -| `Задача` | Task | -| `Обработка` | DataProcessor | -| `Отчет` | Report | -| `ОбщаяФорма` | CommonForm | -| `ОбщаяКоманда` | CommonCommand | -| `Подсистема` | Subsystem | -| `КритерийОтбора` | FilterCriterion | -| `ЖурналДокументов` | DocumentJournal | -| `Последовательность` | Sequence | -| `ВебСервис` | WebService | -| `HTTPСервис` | HTTPService | -| `СервисИнтеграции` | IntegrationService | -| `ПараметрСеанса` | SessionParameter | -| `ОбщийРеквизит` | CommonAttribute | -| `Конфигурация` | Configuration | -| `Перечисление` | Enum | - -Вложенные типы: `Реквизит` → Attribute, `СтандартныйРеквизит` → StandardAttribute, `ТабличнаяЧасть` → TabularSection, `Измерение` → Dimension, `Ресурс` → Resource, `Команда` → Command, `РеквизитАдресации` → AddressingAttribute. - -**Права (основные):** - -| Русский | English | -|---------|---------| -| `Чтение` | Read | -| `Добавление` | Insert | -| `Изменение` | Update | -| `Удаление` | Delete | -| `Просмотр` | View | -| `Редактирование` | Edit | -| `ВводПоСтроке` | InputByString | -| `Проведение` | Posting | -| `ОтменаПроведения` | UndoPosting | -| `Использование` | Use | -| `Получение` | Get | -| `Установка` | Set | -| `Старт` | Start | -| `Выполнение` | Execute | -| `УправлениеИтогами` | TotalsControl | - -**Права (интерактивные):** - -| Русский | English | -|---------|---------| -| `ИнтерактивноеДобавление` | InteractiveInsert | -| `ИнтерактивнаяПометкаУдаления` | InteractiveSetDeletionMark | -| `ИнтерактивноеСнятиеПометкиУдаления` | InteractiveClearDeletionMark | -| `ИнтерактивноеУдаление` | InteractiveDelete | -| `ИнтерактивноеУдалениеПомеченных` | InteractiveDeleteMarked | -| `ИнтерактивноеПроведение` | InteractivePosting | -| `ИнтерактивноеПроведениеНеоперативное` | InteractivePostingRegular | -| `ИнтерактивнаяОтменаПроведения` | InteractiveUndoPosting | -| `ИнтерактивноеИзменениеПроведенных` | InteractiveChangeOfPosted | -| `ИнтерактивныйСтарт` | InteractiveStart | -| `ИнтерактивнаяАктивация` | InteractiveActivate | -| `ИнтерактивноеВыполнение` | InteractiveExecute | - -**Права (конфигурация):** - -| Русский | English | -|---------|---------| -| `Администрирование` | Administration | -| `АдминистрированиеДанных` | DataAdministration | -| `ТонкийКлиент` | ThinClient | -| `ТолстыйКлиент` | ThickClient | -| `ВебКлиент` | WebClient | -| `МобильныйКлиент` | MobileClient | -| `ВнешнееСоединение` | ExternalConnection | -| `Вывод` | Output | -| `СохранениеДанныхПользователя` | SaveUserData | - -### Шаблоны ограничений (RLS templates) +### Шаблоны RLS ```json -"templates": [ - { - "name": "ДляОбъекта(Модификатор)", - "condition": "// текст шаблона\nГДЕ 1=1\n&Модификатор" - } -] +"templates": [{"name": "ДляОбъекта(Мод)", "condition": "ГДЕ Организация = &ТекОрг"}] ``` -`&` в условии автоматически экранируется в `&` в XML. +Ссылка в `rls`: `"#ДляОбъекта(\"\")"`. Символ `&` автоматически экранируется в XML. ## Примеры -### Простая роль (только пресеты) +### Простая роль ```json { - "name": "ЧтениеНоменклатуры", - "synonym": "Чтение номенклатуры", - "objects": [ - "Catalog.Номенклатура: @view", - "Catalog.Контрагенты: @view", - "DataProcessor.Загрузка: @use" - ] -} -``` - -### Роль для регламентного задания - -```json -{ - "name": "ОбновлениеЦен", - "synonym": "Обновление цен номенклатуры", - "objects": [ - "Catalog.Номенклатура: Read", - "Catalog.Валюты: Read", - "InformationRegister.ЦеныНоменклатуры: Read, Update", - "Constant.ОсновнаяВалюта: Read" - ] + "name": "ЧтениеНоменклатуры", "synonym": "Чтение номенклатуры", + "objects": ["Catalog.Номенклатура: @view", "Catalog.Контрагенты: @view", "DataProcessor.Загрузка: @use"] } ``` @@ -283,53 +91,13 @@ RolesDir/ "synonym": "Чтение документов (ограничение по организации)", "objects": [ "Catalog.Организации: @view", - { - "name": "Document.РеализацияТоваровУслуг", - "preset": "view", - "rls": { - "Read": "#ДляОбъекта(\"\")" - } - } + {"name": "Document.РеализацияТоваровУслуг", "preset": "view", "rls": {"Read": "#ДляОбъекта(\"\")"}} ], - "templates": [ - { - "name": "ДляОбъекта(Модификатор)", - "condition": "ГДЕ Организация = &ТекущаяОрганизация" - } - ] + "templates": [{"name": "ДляОбъекта(Модификатор)", "condition": "ГДЕ Организация = &ТекущаяОрганизация"}] } ``` -### Роль с русскими синонимами - -```json -{ - "name": "ПросмотрДанных", - "synonym": "Просмотр данных", - "objects": [ - "Справочник.Контрагенты: @view", - "Документ.Реализация: Чтение, Просмотр", - "РегистрСведений.Цены: @edit", - "Обработка.ЗагрузкаДанных: @use" - ] -} -``` - -### Роль с переопределением прав из пресета - -```json -{ - "name": "ОграниченноеРедактирование", - "synonym": "Редактирование без удаления", - "objects": [ - { - "name": "Catalog.Контрагенты", - "preset": "edit", - "rights": { "Delete": false } - } - ] -} -``` +Подробные таблицы пресетов, русских синонимов и дополнительные примеры — в `dsl-reference.md`. ## Верификация diff --git a/.claude/skills/role-compile/dsl-reference.md b/.claude/skills/role-compile/dsl-reference.md new file mode 100644 index 00000000..59b7c101 --- /dev/null +++ b/.claude/skills/role-compile/dsl-reference.md @@ -0,0 +1,318 @@ +# Role DSL — полная справка + +Подробная справка по JSON DSL для `/role-compile`. Компактное описание — в [SKILL.md](SKILL.md). + +## Структура верхнего уровня + +```json +{ + "name": "ИмяРоли", + "synonym": "Отображаемое имя роли", + "comment": "", + "setForNewObjects": false, + "setForAttributesByDefault": true, + "independentRightsOfChildObjects": false, + "objects": [ ... ], + "templates": [ ... ] +} +``` + +- `name` — программное имя роли (обязательно) +- `synonym` — отображаемое имя (по умолчанию = name) +- `comment` — комментарий (по умолчанию пусто) +- Глобальные флаги — по умолчанию `false`, `true`, `false` + +## Объекты: два формата + +Массив `objects` принимает строки (shorthand) и объекты (полная форма). + +### Строковый shorthand + +``` +"ОбъектМетаданных: @пресет" +"ОбъектМетаданных: Право1, Право2" +``` + +Примеры: +```json +"objects": [ + "Catalog.Номенклатура: @view", + "Document.Реализация: @edit", + "InformationRegister.Цены: Read, Update", + "DataProcessor.Загрузка: @use" +] +``` + +### Объектная форма (для RLS и переопределений) + +```json +{ + "name": "Document.Реализация", + "preset": "view", + "rights": { "Delete": false }, + "rls": { "Read": "#ДляОбъекта(\"\")" } +} +``` + +- `preset` — базовый набор прав (`"view"`, `"edit"`, `"use"`) +- `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 | +| 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 | + +### `@use` — использование + +| Тип объекта | Права | +|-------------|-------| +| DataProcessor, Report | Use, View | +| CommonForm, CommonCommand, Subsystem | View | +| WebService, HTTPService, IntegrationService | Use | + +Если пресет не определён для типа объекта — предупреждение с подсказкой доступных. + +## Русские синонимы + +Скрипт автоматически транслирует русские имена в английские. Можно смешивать: `"Справочник.Контрагенты: Чтение, View"` — работает. + +### Типы объектов + +| Русский | English | +|---------|---------| +| `Справочник` | Catalog | +| `Документ` | Document | +| `РегистрСведений` | InformationRegister | +| `РегистрНакопления` | AccumulationRegister | +| `РегистрБухгалтерии` | AccountingRegister | +| `РегистрРасчета` | CalculationRegister | +| `Константа` | Constant | +| `ПланСчетов` | ChartOfAccounts | +| `ПланВидовХарактеристик` | ChartOfCharacteristicTypes | +| `ПланВидовРасчета` | ChartOfCalculationTypes | +| `ПланОбмена` | ExchangePlan | +| `БизнесПроцесс` | BusinessProcess | +| `Задача` | Task | +| `Обработка` | DataProcessor | +| `Отчет` | Report | +| `ОбщаяФорма` | CommonForm | +| `ОбщаяКоманда` | CommonCommand | +| `Подсистема` | Subsystem | +| `КритерийОтбора` | FilterCriterion | +| `ЖурналДокументов` | DocumentJournal | +| `Последовательность` | Sequence | +| `ВебСервис` | WebService | +| `HTTPСервис` | HTTPService | +| `СервисИнтеграции` | IntegrationService | +| `ПараметрСеанса` | SessionParameter | +| `ОбщийРеквизит` | CommonAttribute | +| `Конфигурация` | Configuration | +| `Перечисление` | Enum | + +### Вложенные типы + +| Русский | English | +|---------|---------| +| `Реквизит` | Attribute | +| `СтандартныйРеквизит` | StandardAttribute | +| `ТабличнаяЧасть` | TabularSection | +| `Измерение` | Dimension | +| `Ресурс` | Resource | +| `Команда` | Command | +| `РеквизитАдресации` | AddressingAttribute | + +### Права (основные) + +| Русский | English | +|---------|---------| +| `Чтение` | Read | +| `Добавление` | Insert | +| `Изменение` | Update | +| `Удаление` | Delete | +| `Просмотр` | View | +| `Редактирование` | Edit | +| `ВводПоСтроке` | InputByString | +| `Проведение` | Posting | +| `ОтменаПроведения` | UndoPosting | +| `Использование` | Use | +| `Получение` | Get | +| `Установка` | Set | +| `Старт` | Start | +| `Выполнение` | Execute | +| `УправлениеИтогами` | TotalsControl | + +### Права (интерактивные) + +| Русский | English | +|---------|---------| +| `ИнтерактивноеДобавление` | InteractiveInsert | +| `ИнтерактивнаяПометкаУдаления` | InteractiveSetDeletionMark | +| `ИнтерактивноеСнятиеПометкиУдаления` | InteractiveClearDeletionMark | +| `ИнтерактивноеУдаление` | InteractiveDelete | +| `ИнтерактивноеУдалениеПомеченных` | InteractiveDeleteMarked | +| `ИнтерактивноеПроведение` | InteractivePosting | +| `ИнтерактивноеПроведениеНеоперативное` | InteractivePostingRegular | +| `ИнтерактивнаяОтменаПроведения` | InteractiveUndoPosting | +| `ИнтерактивноеИзменениеПроведенных` | InteractiveChangeOfPosted | +| `ИнтерактивныйСтарт` | InteractiveStart | +| `ИнтерактивнаяАктивация` | InteractiveActivate | +| `ИнтерактивноеВыполнение` | InteractiveExecute | + +### Права (конфигурация) + +| Русский | English | +|---------|---------| +| `Администрирование` | Administration | +| `АдминистрированиеДанных` | DataAdministration | +| `ТонкийКлиент` | ThinClient | +| `ТолстыйКлиент` | ThickClient | +| `ВебКлиент` | WebClient | +| `МобильныйКлиент` | MobileClient | +| `ВнешнееСоединение` | ExternalConnection | +| `Вывод` | Output | +| `СохранениеДанныхПользователя` | SaveUserData | + +## Типы объектов без прав в ролях + +Следующие типы 1С **не могут** иметь права в ролях (не добавляются в `objects`): + +| Тип | Причина | +|-----|---------| +| Enum (Перечисление) | Права наследуются от конфигурации, явное назначение невозможно | +| CommonModule (ОбщийМодуль) | Не имеет собственных прав в роли | +| DefinedType (ОпределяемыйТип) | Тип данных, не объект прав | +| CommonPicture (ОбщаяКартинка) | Ресурс, не объект прав | +| CommonTemplate (ОбщийМакет) | Ресурс, не объект прав | +| Language (Язык) | Конфигурационный элемент | +| FunctionalOption (ФункциональнаяОпция) | Не объект прав | +| FunctionalOptionsParameter | Не объект прав | +| EventSubscription (ПодпискаНаСобытие) | Не объект прав | +| ScheduledJob (РегламентноеЗадание) | Не объект прав | +| StyleItem (ЭлементСтиля) | Ресурс оформления | + +## Шаблоны ограничений (RLS templates) + +```json +"templates": [ + { + "name": "ДляОбъекта(Модификатор)", + "condition": "// текст шаблона\nГДЕ 1=1\n&Модификатор" + } +] +``` + +- `&` в условии автоматически экранируется в `&` в XML +- Ссылка на шаблон в `rls`: `"#ИмяШаблона(\"параметры\")"` — начинается с `#` +- Параметры шаблона можно передавать пустыми: `#ДляОбъекта("")` + +## Примеры + +### 1. Простая роль (только пресеты) + +```json +{ + "name": "ЧтениеНоменклатуры", + "synonym": "Чтение номенклатуры", + "objects": [ + "Catalog.Номенклатура: @view", + "Catalog.Контрагенты: @view", + "DataProcessor.Загрузка: @use" + ] +} +``` + +### 2. Роль для регламентного задания + +```json +{ + "name": "ОбновлениеЦен", + "synonym": "Обновление цен номенклатуры", + "objects": [ + "Catalog.Номенклатура: Read", + "Catalog.Валюты: Read", + "InformationRegister.ЦеныНоменклатуры: Read, Update", + "Constant.ОсновнаяВалюта: Read" + ] +} +``` + +### 3. Роль с RLS + +```json +{ + "name": "ЧтениеДокументовПоОрганизации", + "synonym": "Чтение документов (ограничение по организации)", + "objects": [ + "Catalog.Организации: @view", + { + "name": "Document.РеализацияТоваровУслуг", + "preset": "view", + "rls": { + "Read": "#ДляОбъекта(\"\")" + } + } + ], + "templates": [ + { + "name": "ДляОбъекта(Модификатор)", + "condition": "ГДЕ Организация = &ТекущаяОрганизация" + } + ] +} +``` + +### 4. Роль с русскими синонимами + +```json +{ + "name": "ПросмотрДанных", + "synonym": "Просмотр данных", + "objects": [ + "Справочник.Контрагенты: @view", + "Документ.Реализация: Чтение, Просмотр", + "РегистрСведений.Цены: @edit", + "Обработка.ЗагрузкаДанных: @use" + ] +} +``` + +### 5. Роль с переопределением прав из пресета + +```json +{ + "name": "ОграниченноеРедактирование", + "synonym": "Редактирование без удаления", + "objects": [ + { + "name": "Catalog.Контрагенты", + "preset": "edit", + "rights": { "Delete": false } + } + ] +} +``` diff --git a/README.md b/README.md index 306fe29f..a1adf052 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ - [MXL DSL](docs/mxl-dsl-spec.md) — JSON-формат описания макета для `/mxl-compile` и `/mxl-decompile` - [Form DSL](docs/form-dsl-spec.md) — JSON-формат описания формы для `/form-compile` - [Роли (Rights.xml)](docs/1c-role-spec.md) — XML-формат прав роли, типы объектов, RLS +- [Role DSL](docs/role-dsl-spec.md) — JSON-формат описания ролей для `/role-compile` ## Структура репозитория diff --git a/docs/role-dsl-spec.md b/docs/role-dsl-spec.md new file mode 100644 index 00000000..662db465 --- /dev/null +++ b/docs/role-dsl-spec.md @@ -0,0 +1,113 @@ +# Спецификация Role JSON DSL + +Формат JSON для описания ролей 1С, используемый навыком `/role-compile`. + +## Обзор + +Role JSON DSL — компактный JSON-формат, транслируемый скриптом в XML-файлы роли 1С:Предприятия (метаданные + Rights.xml). Поддерживает пресеты прав, русские синонимы типов и прав, шаблоны ограничений (RLS). + +## Корневой объект + +| Поле | Тип | Обяз. | По умолчанию | Описание | +|------|-----|:-----:|:------------:|----------| +| `name` | string | да | — | Программное имя роли | +| `synonym` | string | нет | = name | Отображаемое имя | +| `comment` | string | нет | `""` | Комментарий | +| `setForNewObjects` | bool | нет | `false` | Устанавливать для новых объектов | +| `setForAttributesByDefault` | bool | нет | `true` | Устанавливать для реквизитов по умолчанию | +| `independentRightsOfChildObjects` | bool | нет | `false` | Независимые права подчинённых объектов | +| `objects` | array | нет | `[]` | Массив объектов метаданных с правами | +| `templates` | array | нет | `[]` | Шаблоны ограничений (RLS) | + +## Элементы `objects` + +Массив принимает два формата, которые можно смешивать. + +### Строковый shorthand + +``` +"Тип.Имя: @пресет" +"Тип.Имя: Право1, Право2" +``` + +Тип — английский (Catalog) или русский (Справочник). Права — английские (Read) или русские (Чтение). + +### Объектная форма + +| Поле | Тип | Обяз. | Описание | +|------|-----|:-----:|----------| +| `name` | string | да | Полное имя объекта: `Тип.Имя` | +| `preset` | string | нет | Пресет: `"view"`, `"edit"`, `"use"` (без `@`) | +| `rights` | object\|array | нет | Переопределения: `{"Right": bool}` или `["Right1", "Right2"]` | +| `rls` | object | нет | RLS: `{"ИмяПрава": "текст условия или #шаблон"}` | + +При наличии `preset` + `rights` — сначала применяется пресет, затем `rights` переопределяют отдельные права. + +## Пресеты + +Три встроенных пресета определяют набор прав в зависимости от типа объекта: + +| Пресет | Назначение | +|--------|------------| +| `view` | Просмотр: Read, View (+InputByString для справочников/документов) | +| `edit` | Полное редактирование: CRUD + Interactive* + Posting (документы) | +| `use` | Использование: Use, View (обработки/отчёты/сервисы) | + +Подробные таблицы прав для каждого типа объекта — в `.claude/skills/role-compile/dsl-reference.md`. + +## Шаблоны ограничений (RLS) + +Элементы массива `templates`: + +| Поле | Тип | Описание | +|------|-----|----------| +| `name` | string | Имя шаблона с параметрами: `"ДляОбъекта(Модификатор)"` | +| `condition` | string | Текст условия. `&` экранируется в `&` автоматически | + +Ссылка на шаблон в `rls`: `"#ИмяШаблона(\"параметры\")"` — начинается с `#`. + +## Русские синонимы + +DSL принимает русские имена типов и прав, транслируя их в английские. Полные таблицы соответствий — в `.claude/skills/role-compile/dsl-reference.md`. + +Примеры: `Справочник` → Catalog, `Документ` → Document, `Чтение` → Read, `Просмотр` → View. + +## Пример + +```json +{ + "name": "МенеджерПродаж", + "synonym": "Менеджер продаж", + "objects": [ + "Document.РеализацияТоваровУслуг: @edit", + "Catalog.Контрагенты: @view", + "Catalog.Номенклатура: @view", + { + "name": "Document.ЗаказКлиента", + "preset": "view", + "rls": { "Read": "#ДляОбъекта(\"\")" } + } + ], + "templates": [ + { + "name": "ДляОбъекта(Модификатор)", + "condition": "ГДЕ Организация = &ТекущаяОрганизация" + } + ] +} +``` + +## Генерируемые файлы + +``` +Roles/ + ИмяРоли.xml # Метаданные (UUID, синоним, флаги) + ИмяРоли/ + └── Ext/ + └── Rights.xml # Права доступа (объекты, права, RLS) +``` + +## См. также + +- [Роли (Rights.xml)](1c-role-spec.md) — XML-формат прав роли, типы объектов, RLS +- [Гайд по ролям](role-guide.md) — сценарии использования, рабочий цикл diff --git a/docs/role-guide.md b/docs/role-guide.md index 5fd9dfeb..ccee91e8 100644 --- a/docs/role-guide.md +++ b/docs/role-guide.md @@ -67,7 +67,7 @@ ### Русские синонимы -Скрипт принимает русские имена типов и прав: `Справочник` → Catalog, `Чтение` → Read, `Проведение` → Posting и т.д. Полный список — в [SKILL.md навыка](../.claude/skills/role-compile/SKILL.md). +Скрипт принимает русские имена типов и прав: `Справочник` → Catalog, `Чтение` → Read, `Проведение` → Posting и т.д. Полный список — в [спецификации Role DSL](role-dsl-spec.md). ## Сценарии использования @@ -152,4 +152,5 @@ Roles/ ## Спецификация -Полная спецификация формата: [1c-role-spec.md](1c-role-spec.md) — типы объектов, права, RLS, шаблоны ограничений, версии формата. +- [1c-role-spec.md](1c-role-spec.md) — XML-формат прав роли, типы объектов, RLS, шаблоны ограничений +- [role-dsl-spec.md](role-dsl-spec.md) — JSON DSL для описания ролей (формат входных данных `/role-compile`)