Как настроить RLS в 1С:ERP 2.4 для фильтрации документов по значению справочника через группы доступа?

Программист 1С:ERP Управление предприятием Управленческий учет IT и автоматизация бизнеса
← На главную

При разработке новых объектов в 1С:ERP 2.4 программисты часто сталкиваются с тем, что стандартного создания роли и прописывания шаблона ограничения доступа недостаточно. В современных конфигурациях на базе Библиотеки стандартных подсистем (БСП) используется механизм «Производительного RLS», который требует интеграции новых объектов в общую систему управления доступом. Если мы просто скопируем шаблон из типовой роли, права могут «обрезаться» или, наоборот, не подтягиваться из настроек групп доступа.

В этой статье мы подробно разберем, как правильно настроить ограничение прав доступа на уровне записей для нового документа, чтобы им можно было управлять через стандартный интерфейс «Группы доступа», используя в качестве разреза фильтрации справочник (например, Валюты).

Понимаем разницу в режимах RLS

Прежде чем приступать к кодингу, проанализируем ситуацию с режимами работы RLS в ERP 2.4. Существует два основных подхода:

  1. Стандартный режим: Ограничение работает через сложные запросы в шаблонах ролей. Система каждый раз при выполнении запроса динамически накладывает условия. Это гибко, но медленно при больших объемах данных.
  2. Производительный режим: Это основной режим для ERP 2.4. Здесь права не вычисляются «на лету» в каждом запросе. Вместо этого система заранее рассчитывает ключи доступа и хранит их в специальных регистрах (КлючиДоступаКОбъектам). Доступ проверяется путем простого соединения таблицы документа с таблицей ключей.

Если в вашей базе включен производительный режим, то простое редактирование текста RLS в роли не даст результата. Нам необходимо зарегистрировать наш объект в подсистеме управления доступом.

Шаг 1. Регистрация нового Вида доступа

Чтобы в профилях групп доступа появилась возможность выбирать разрешенные значения справочника Валюты, мы должны объявить этот «Вид доступа» программно. Для этого найдем общий модуль УправлениеДоступомПереопределяемый и процедуру ПриЗаполненииВидовДоступа.

Рассмотрим пример добавления нового вида доступа:


Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт
    
    // Описываем новый вид доступа по валютам
    ВидДоступа = ВидыДоступа.Добавить();
    ВидДоступа.Имя = "Валюты";
    ВидДоступа.Заголовок = НСтр("ru = 'Валюты'");
    ВидДоступа.ТипЗначений = Тип("СправочникСсылка.Валюты");
    ВидДоступа.ГруппыЗначений = Тип("СправочникСсылка.ГруппыДоступаВалют"); // Если используются группы
    
КонецПроцедуры

После этого изменения в интерфейсе настройки профилей групп доступа появится новая строка, позволяющая ограничивать права в разрезе валют.

Шаг 2. Настройка связей объектов (Назначение видов доступа)

Теперь выясним причину, по которой система должна понять: «Чтобы проверить доступ к Документу Х, нужно посмотреть на его реквизит Валюта и сравнить с настройками Вида доступа Валюты». Это настраивается в том же модуле УправлениеДоступомПереопределяемый, но в процедуре ПриЗаполненииНазначенияВидовДоступа.

Разберем по шагам, как прописать эту связь:


Процедура ПриЗаполненииНазначенияВидовДоступа(НазначениеВидовДоступа) Экспорт
    
    // Указываем, что для нашего нового документа 
    // будет применяться ограничение по виду доступа "Валюты"
    НоваяСтрока = НазначениеВидовДоступа.Добавить();
    НоваяСтрока.Объект = Метаданные.Документы.НашНовыйДокумент.ПолноеИмя();
    НоваяСтрока.ВидДоступа = "Валюты";
    
    // Указываем, из какого реквизита объекта брать значение для проверки
    // Если имя реквизита совпадает с именем вида доступа, БСП может найти его сама,
    // но лучше указать явно.
    НоваяСтрока.ИмяПоля = "ВалютаДокумента";

КонецПроцедуры

Шаг 3. Настройка шаблона в роли

Несмотря на то что логика прав вынесена в программный код, в самой роли (на уровне метаданных) все равно должен стоять вызов стандартного шаблона. В ERP 2.4 для производительного режима используется упрощенный шаблон. Посмотрим на пример текста ограничения для права Чтение:

#ПоЗначениям("Документ.НашНовыйДокумент", "", "", "Валюты", "ВалютаДокумента", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")

Важный нюанс: Если вы создаете новые роли, убедитесь, что они добавлены в соответствующие профили групп доступа. Также помните различие между Чтением (Read) и Просмотром (View). Ограничение RLS всегда ставится на Чтение, чтобы данные фильтровались на уровне СУБД. Просмотр лишь управляет видимостью в интерфейсе.

Шаг 4. Обновление метаданных и ключей доступа

После внесения изменений в код и состав ролей, система не подхватит их автоматически. Проанализируем обязательные действия для применения настроек:

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

Особенности работы через расширения

Рассмотрим ситуацию, когда вы ведете разработку в расширении. БСП в ERP 2.4 имеет свои особенности работы с расширениями. Иногда процедуры Переопределяемый в основном коде не «видят» объекты из расширения напрямую. В этом случае убедитесь, что ваш документ добавлен в определяемые типы, которые используются в подсистеме доступа (например, ВладелецНастроекПрав или аналогичные в зависимости от версии БСП).

Влияние на производительность

Проанализируем влияние такой настройки на систему. Ограничение по справочнику Валюты обычно работает быстро, так как количество валют в базе невелико. Однако механизм Производительного RLS создает записи в регистрах ключей на каждый уникальный набор значений прав. Если вы решите сделать RLS по очень часто меняющемуся или очень дробному справочнику (например, по ФизическиеЛица, которых десятки тысяч), это может существенно замедлить процесс записи документа из-за необходимости пересчета ключей доступа.

Резюме: Для корректной фильтрации в ERP 2.4 недостаточно просто прописать ГДЕ Валюта = &Валюта в роли. Используйте программный интерфейс модуля УправлениеДоступомПереопределяемый, регистрируйте виды доступа и следите за актуальностью ключей доступа в регистрах. Только такой подход обеспечит стабильную работу системы и корректную интеграцию с типовыми механизмами администрирования прав.

← На главную