mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-28 14:09:41 +03:00
Refactor role-compile SKILL.md with progressive disclosure
Extract detailed preset tables, Russian synonym tables, and extra examples into dsl-reference.md (318 lines). Compact SKILL.md from 340 to 107 lines. Add role-dsl-spec.md project spec. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
dc10422f10
commit
8b8bc1225a
@@ -11,267 +11,75 @@ allowed-tools:
|
|||||||
|
|
||||||
# /role-compile — генерация роли 1С из JSON DSL
|
# /role-compile — генерация роли 1С из JSON DSL
|
||||||
|
|
||||||
Принимает компактное JSON-определение роли и генерирует два файла: метаданные (`Roles/Имя.xml`) и права (`Roles/Имя/Ext/Rights.xml`). UUID генерируется автоматически.
|
Принимает JSON-определение роли → генерирует `Roles/Имя.xml` (метаданные) и `Roles/Имя/Ext/Rights.xml` (права). UUID автоматически.
|
||||||
|
|
||||||
## Использование
|
## Параметры и команда
|
||||||
|
|
||||||
```
|
| Параметр | Описание |
|
||||||
/role-compile <JsonPath> <RolesDir>
|
|----------|----------|
|
||||||
```
|
| `JsonPath` | Путь к JSON-определению роли |
|
||||||
|
| `RolesDir` | Каталог `Roles/` в исходниках конфигурации |
|
||||||
## Параметры
|
|
||||||
|
|
||||||
| Параметр | Обязательный | Описание |
|
|
||||||
|----------|:------------:|----------|
|
|
||||||
| JsonPath | да | Путь к JSON-определению роли |
|
|
||||||
| RolesDir | да | Каталог `Roles/` в исходниках конфигурации |
|
|
||||||
|
|
||||||
## Команда
|
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
powershell.exe -NoProfile -File .claude\skills\role-compile\scripts\role-compile.ps1 -JsonPath "<json>" -OutputDir "<RolesDir>"
|
powershell.exe -NoProfile -File .claude\skills\role-compile\scripts\role-compile.ps1 -JsonPath "<json>" -OutputDir "<RolesDir>"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Выходные файлы
|
|
||||||
|
|
||||||
```
|
|
||||||
RolesDir/
|
|
||||||
ИмяРоли.xml ← метаданные (uuid, имя, синоним)
|
|
||||||
ИмяРоли/
|
|
||||||
Ext/
|
|
||||||
Rights.xml ← определение прав
|
|
||||||
```
|
|
||||||
|
|
||||||
После генерации: добавить `<Role>ИмяРоли</Role>` в `<ChildObjects>` файла `Configuration.xml`.
|
После генерации: добавить `<Role>ИмяРоли</Role>` в `<ChildObjects>` файла `Configuration.xml`.
|
||||||
|
|
||||||
## JSON DSL — справка
|
## JSON DSL
|
||||||
|
|
||||||
### Структура верхнего уровня
|
### Структура
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{ "name": "ИмяРоли", "synonym": "Отображаемое имя", "objects": [...], "templates": [...] }
|
||||||
"name": "ИмяРоли",
|
|
||||||
"synonym": "Отображаемое имя роли",
|
|
||||||
"comment": "",
|
|
||||||
"setForNewObjects": false,
|
|
||||||
"setForAttributesByDefault": true,
|
|
||||||
"independentRightsOfChildObjects": false,
|
|
||||||
"objects": [ ... ],
|
|
||||||
"templates": [ ... ]
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
- `name` — программное имя роли (обязательно)
|
Необязательные: `comment` (""), `setForNewObjects` (false), `setForAttributesByDefault` (true), `independentRightsOfChildObjects` (false).
|
||||||
- `synonym` — отображаемое имя (по умолчанию = name)
|
|
||||||
- `comment` — комментарий (по умолчанию пусто)
|
|
||||||
- Глобальные флаги — по умолчанию `false`, `true`, `false`
|
|
||||||
|
|
||||||
### Объекты: два формата
|
### Shorthand-строки и объектная форма
|
||||||
|
|
||||||
Массив `objects` принимает строки (shorthand) и объекты (полная форма).
|
|
||||||
|
|
||||||
#### Строковый shorthand
|
|
||||||
|
|
||||||
```
|
|
||||||
"ОбъектМетаданных: @пресет"
|
|
||||||
"ОбъектМетаданных: Право1, Право2"
|
|
||||||
```
|
|
||||||
|
|
||||||
Примеры:
|
|
||||||
```json
|
```json
|
||||||
"objects": [
|
"objects": [
|
||||||
"Catalog.Номенклатура: @view",
|
"Catalog.Номенклатура: @view",
|
||||||
"Document.Реализация: @edit",
|
"Document.Реализация: @edit",
|
||||||
"InformationRegister.Цены: Read, Update",
|
"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`)
|
`@` обязателен в shorthand. В объектной форме — `"preset": "view"` без `@`.
|
||||||
|
|
||||||
Пресеты обозначаются `@` в строковом формате. В объектной форме ключ `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"` — работает.
|
Поддерживаются русские типы (`Справочник`→Catalog, `Документ`→Document) и права (`Чтение`→Read, `Просмотр`→View). Смешивание допустимо: `"Справочник.Контрагенты: Чтение, View"`.
|
||||||
|
|
||||||
**Типы объектов:**
|
### Шаблоны RLS
|
||||||
|
|
||||||
| Русский | 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)
|
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"templates": [
|
"templates": [{"name": "ДляОбъекта(Мод)", "condition": "ГДЕ Организация = &ТекОрг"}]
|
||||||
{
|
|
||||||
"name": "ДляОбъекта(Модификатор)",
|
|
||||||
"condition": "// текст шаблона\nГДЕ 1=1\n&Модификатор"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
`&` в условии автоматически экранируется в `&` в XML.
|
Ссылка в `rls`: `"#ДляОбъекта(\"\")"`. Символ `&` автоматически экранируется в XML.
|
||||||
|
|
||||||
## Примеры
|
## Примеры
|
||||||
|
|
||||||
### Простая роль (только пресеты)
|
### Простая роль
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"name": "ЧтениеНоменклатуры",
|
"name": "ЧтениеНоменклатуры", "synonym": "Чтение номенклатуры",
|
||||||
"synonym": "Чтение номенклатуры",
|
"objects": ["Catalog.Номенклатура: @view", "Catalog.Контрагенты: @view", "DataProcessor.Загрузка: @use"]
|
||||||
"objects": [
|
|
||||||
"Catalog.Номенклатура: @view",
|
|
||||||
"Catalog.Контрагенты: @view",
|
|
||||||
"DataProcessor.Загрузка: @use"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Роль для регламентного задания
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"name": "ОбновлениеЦен",
|
|
||||||
"synonym": "Обновление цен номенклатуры",
|
|
||||||
"objects": [
|
|
||||||
"Catalog.Номенклатура: Read",
|
|
||||||
"Catalog.Валюты: Read",
|
|
||||||
"InformationRegister.ЦеныНоменклатуры: Read, Update",
|
|
||||||
"Constant.ОсновнаяВалюта: Read"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -283,53 +91,13 @@ RolesDir/
|
|||||||
"synonym": "Чтение документов (ограничение по организации)",
|
"synonym": "Чтение документов (ограничение по организации)",
|
||||||
"objects": [
|
"objects": [
|
||||||
"Catalog.Организации: @view",
|
"Catalog.Организации: @view",
|
||||||
{
|
{"name": "Document.РеализацияТоваровУслуг", "preset": "view", "rls": {"Read": "#ДляОбъекта(\"\")"}}
|
||||||
"name": "Document.РеализацияТоваровУслуг",
|
|
||||||
"preset": "view",
|
|
||||||
"rls": {
|
|
||||||
"Read": "#ДляОбъекта(\"\")"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"templates": [
|
"templates": [{"name": "ДляОбъекта(Модификатор)", "condition": "ГДЕ Организация = &ТекущаяОрганизация"}]
|
||||||
{
|
|
||||||
"name": "ДляОбъекта(Модификатор)",
|
|
||||||
"condition": "ГДЕ Организация = &ТекущаяОрганизация"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Роль с русскими синонимами
|
Подробные таблицы пресетов, русских синонимов и дополнительные примеры — в `dsl-reference.md`.
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"name": "ПросмотрДанных",
|
|
||||||
"synonym": "Просмотр данных",
|
|
||||||
"objects": [
|
|
||||||
"Справочник.Контрагенты: @view",
|
|
||||||
"Документ.Реализация: Чтение, Просмотр",
|
|
||||||
"РегистрСведений.Цены: @edit",
|
|
||||||
"Обработка.ЗагрузкаДанных: @use"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Роль с переопределением прав из пресета
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"name": "ОграниченноеРедактирование",
|
|
||||||
"synonym": "Редактирование без удаления",
|
|
||||||
"objects": [
|
|
||||||
{
|
|
||||||
"name": "Catalog.Контрагенты",
|
|
||||||
"preset": "edit",
|
|
||||||
"rights": { "Delete": false }
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Верификация
|
## Верификация
|
||||||
|
|
||||||
|
|||||||
@@ -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 }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -40,6 +40,7 @@
|
|||||||
- [MXL DSL](docs/mxl-dsl-spec.md) — JSON-формат описания макета для `/mxl-compile` и `/mxl-decompile`
|
- [MXL DSL](docs/mxl-dsl-spec.md) — JSON-формат описания макета для `/mxl-compile` и `/mxl-decompile`
|
||||||
- [Form DSL](docs/form-dsl-spec.md) — JSON-формат описания формы для `/form-compile`
|
- [Form DSL](docs/form-dsl-spec.md) — JSON-формат описания формы для `/form-compile`
|
||||||
- [Роли (Rights.xml)](docs/1c-role-spec.md) — XML-формат прав роли, типы объектов, RLS
|
- [Роли (Rights.xml)](docs/1c-role-spec.md) — XML-формат прав роли, типы объектов, RLS
|
||||||
|
- [Role DSL](docs/role-dsl-spec.md) — JSON-формат описания ролей для `/role-compile`
|
||||||
|
|
||||||
## Структура репозитория
|
## Структура репозитория
|
||||||
|
|
||||||
|
|||||||
@@ -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) — сценарии использования, рабочий цикл
|
||||||
+3
-2
@@ -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`)
|
||||||
|
|||||||
Reference in New Issue
Block a user