Repository navigation
open-sdbl 0.6.0
Релиз после 0.5.5: чтение прав доступа доведено до рабочего состояния на трёх типовых базах — УНФ, «Документооборот» (PostgreSQL и MS SQL Server). Каждое изменение поведения — со своей спецификацией OpenSpec.
Ограничения доступа применяются к запросам
\as <пользователь> теперь не только запоминает пользователя, а разворачивает ограничения его ролей на Чтение и кладёт их в тот же список, что и \restrict, — по строке на объект, на языке 1С:
open-sdbl=> \as Петрова (бухгалтер)
Current user: Петрова (бухгалтер) (640 roles): …
7 session parameters read from the base: ВерсииШаблоновОграниченияДоступа, …
375 restrictions derived into \restrict.
Петрова (бухгалтер)=>
Набранное руками \restrict перекрывает развёрнутое и никогда не затирается; \as clear и \refresh забывают развёрнутые, \session разворачивает их заново. Приглашение консоли называет текущего пользователя.
Параметры сеанса берутся из базы
\as читает то, что база хранит для своих шаблонов: регистр сведений ПараметрыОграниченияДоступа (на MS SQL Server значение лежит в колонке, на PostgreSQL — ссылкой STORHDR на части в binarydata), элемент Справочник.Пользователи по идентификатору пользователя ИБ как ТекущийПользователь и пустую ссылку ВнешниеПользователи. Заданное руками не перетирается; если регистр есть, а прочитать его не удалось — названа причина.
Шаблоны ограничений
parse_templateразбирает текст ограничения или тело шаблона в узлыTemplateNode— текст,#Еслис ветвями, вызовы с аргументами,#Параметр(N)и прочие имена — со смещением каждого узла; несбалансированные директивы дают ошибку с позицией.- Директивы по документации 5.5.4.8.7:
#ТекущаяТаблица(имя таблицы),#ИмяТекущейТаблицы(оно же строковым значением, в кавычках),##как один#, вызов шаблона без скобок. - Полная форма платформы: описание таблицы после
ИЗи соединенияЛЕВОЕ/ВНУТРЕННЕЕпередГДЕ. Соединения компилируются в коррелированный предикат со строкой-якорем(VALUES (1)), поэтому не размножают строки ограничиваемой таблицы. - Консоль показывает шаблоны:
\role— сигнатуры,\template <роль> [<имя>]— тело, из чего оно состоит и разбирается ли.
Роли расширений
Роль, которой нет в Config, ищется в расширениях: _ExtensionsInfo хранит ключ корневого ресурса, корень — индекс имя → ключ, ConfigCas адресует ресурсы по ключу. Читаются и права (<guid>.0), и описатель (<guid>), поэтому роль расширения называется и ограничивает. Роль, которой нет нигде, ничего не даёт и названа в отчёте, а не валит команду.
Консоль
\usersи\userпоказывают e-mail (v8users.Email, с проверкой наличия колонки).\rlsбез аргументов — список ограничений в прочитанных правах: роль, объект, право.- Команды доступа добавлены в автодополнение.
Производительность
Поиск без учёта регистра при разворачивании сворачивал текст на каждое вхождение: одно разворачивание шаблона БСП стоило 0.63 с. Теперь текст сворачивается один раз на поиск — \as для пользователя с 640 ролями и 470 ограниченными объектами занимает 2 с вместо 5 минут, и настолько же быстрее любой запрос к ограниченной таблице.
Совместимость
ExpandedRestrictionполучил полеjoins;RestrictionError— вариантSyntaxAt { message, offset }(перечисление#[non_exhaustive]).- Новое в API:
parse_template,TemplateNode,TemplateBranch,RestrictionTemplate::new,parse_serialized_sequence,ContentKey,extension_root_key,parse_extension_index,StoredValueRef,decode_stored_value,RoleCatalog::extend,InfoBaseUser::email. #ИмяТекущейТаблицытеперь подставляется в кавычках, как описывает документация платформы.