11 KiB
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&Модификатор"
}
]
&в условии автоматически экранируется в&в 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 } }
]
}