Что такое универсальный (производительный) RLS в 1С и как он работает?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

В современных конфигурациях 1С, таких как "Управление торговлей 11", ERP или "Комплексная автоматизация", разработчики часто сталкиваются с новым, непривычным шаблоном ограничения доступа на уровне записей (RLS). Вместо привычных длинных условий с использованием #ПоЗначениям теперь можно увидеть короткие вызовы вроде #ДляОбъекта или #ДляРегистра. Разберем подробнее, что это за универсальный RLS, как он устроен и почему платформа перешла на этот механизм.

Суть производительного RLS в Библиотеке стандартных подсистем (БСП)

Данный механизм называется производительным вариантом RLS. Он поставляется в составе "Библиотеки стандартных подсистем" (БСП) и предназначен для существенного ускорения работы базы данных при расчете прав доступа.

В старом варианте ограничения доступа использовались громоздкие шаблоны, которые "на лету" добавляли к каждому запросу пользователя множество левых соединений и сложных проверок. Чем сложнее была матрица прав (группы доступа, виды доступа, профили), тем сильнее тормозила система при чтении списков документов и справочников.

Проанализируем концепцию нового подхода:

  1. Предварительный расчет прав: Система заранее вычисляет, кто и к каким объектам имеет доступ.
  2. Хранение в регистрах: Результаты расчетов записываются в специальные служебные регистры сведений (например, КлючиДоступаКОбъектам, КлючиДоступаПользователей).
  3. Быстрое чтение: При открытии списков система больше не вычисляет права с нуля. Она делает одно прямое соединение с готовым регистром ключей доступа.

Шаблоны производительного RLS

Посмотрим на пример классического шаблона, который обеспечивает обратную совместимость. Если производительный RLS включен константой, система использует новый подход, иначе — старый. Вот как это выглядит в роли:


#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрНакопленияДвижениеТоваров", "Склад", "", "", "", "")
#Иначе
#ПоЗначениям( "РегистрНакопления.ДвижениеТоваров","Чтение","",
"Склады","Склад", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
#КонецЕсли

А теперь проанализируем сам универсальный макрос #ДляОбъекта, который скрыт под капотом. Он связывает запрашиваемую таблицу с регистром ключей доступа:


ТекущаяТаблица ГДЕ ИСТИНА В
 (
  ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
  ИЗ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам
  // ... далее идут левые соединения с регистрами групп пользователей и наборов групп доступа
  ГДЕ
  #Если "#ПолеОбъекта"  = "" #Тогда
      КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.Ссылка
  #Иначе
      КлючиДоступаКОбъектам.Объект = ТекущаяТаблица.#ПолеОбъекта
  #КонецЕсли
  // ... проверка наличия не-NULL ключа
 )

Как мы видим, основная нагрузка перенесена на регистр КлючиДоступаКОбъектам. Шаблон просто проверяет наличие записи в этом регистре для текущего объекта и пользователя.

Особенности разработки и настройки

Рассмотрим, как переход на этот механизм влияет на работу разработчика:

  1. Унификация ролей: Разработчику больше не нужно писать сложный SQL-код внутри RLS-ограничений в каждой роли. Достаточно вставить стандартный вызов макроса. Сами шаблоны ролей унифицированы, редактировать их напрямую не рекомендуется.
  2. Настройка в коде: Вся бизнес-логика прав (от каких измерений или реквизитов зависит доступ) перенесена в модули конфигурации. Например, описание зависимостей задается в процедуре ПриЗаполненииОграниченияДоступа в модуле менеджера конкретного объекта.
  3. Асинхронность: Поскольку права рассчитываются и пишутся в регистры, этот процесс происходит асинхронно. Если вы добавили пользователя в новую группу доступа, права на старые документы обновятся не мгновенно, а после отработки соответствующих фоновых регламентных заданий (например, ОбновлениеДоступаНаУровнеЗаписей).

Где почитать подробнее?

Поскольку данный RLS является неотъемлемой частью БСП, вся официальная документация по нему находится на портале ИТС в разделе "Библиотека стандартных подсистем". Раздел, который вам нужен, называется "Управление доступом". Там подробно расписано, как адаптировать свои самописные справочники и регистры под производительный вариант RLS, как правильно инициализировать ключи и как работают регламентные задания.

Внедрение производительного RLS в свои подсистемы требует тщательного следования инструкциям БСП, но в результате вы получаете колоссальный прирост производительности при чтении данных в интерфейсе для пользователей с ограниченными правами.

← На главную