Как правильно отладить и настроить RLS в производительном режиме БСП

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

Настройка системы ограничений прав доступа на уровне записей (RLS) — одна из самых трудоемких задач при разработке на платформе 1С:Предприятие 8.3, особенно если используется Библиотека стандартных подсистем (БСП) в так называемом производительном режиме. В этом режиме ограничения работают не через прямые условия в SQL-запросе, а через вспомогательные таблицы ключей доступа. Если вы создали новый объект, прописали код в менеджере, скопировали шаблоны ограничений в роли, но пользователь все равно видит лишние данные или RLS не отрабатывает — значит, система не «подхватила» метаданные. Давайте разберем по шагам, как диагностировать и устранить эту проблему.

Анализ регистрации объекта в подсистеме управления доступом

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

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


Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт
    
    // Регистрация для нового документа
    Описание.Вставить("Документ.НашНовыйДокумент.Чтение.Организации", "Организация");
    Описание.Вставить("Документ.НашНовыйДокумент.Изменение.Организации", "Организация");
    
КонецПроцедуры

Без этой регистрации подсистема БСП не будет знать, что для данного типа документа нужно формировать записи в регистрах ключей доступа по разрезу «Организации». Если записи отсутствуют, RLS либо разрешает всё (если нет ограничивающих ключей), либо запрещает всё (если логика построена от обратного).

Использование инструментов диагностики БСП

Прежде чем погружаться в код, воспользуемся штатными средствами диагностики, которые предоставляет БСП. Это сэкономит часы ручной проверки. Разберем два основных отчета, которые помогут локализовать проблему:

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

Проверка состояния регистров ключей доступа

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

Если вы видите, что в регистре КлючиДоступаКОбъектам нет записей для вашего нового документа, значит, механизм расчета ключей не запустился. Попробуйте запустить обновление данных вручную. Для этого можно использовать обработку УправлениеДоступом, которая входит в состав БСП, и выполнить команду «Обновить списки с учетом изменений метаданных».

Принудительное обновление информационной базы

Иногда обычного сохранения конфигурации (F7) недостаточно для того, чтобы БСП пересчитала внутренние кэши и идентификаторы. Разберем, как запустить полное обновление. Попробуйте запустить сеанс 1С:Предприятие с параметром командной строки: /C ЗапуститьОбновлениеИнформационнойБазы.

Это инициирует выполнение всех процедур из общего модуля ОбновлениеИнформационнойБазы, включая пересчет идентификаторов метаданных и регистрацию новых объектов в справочнике ИдентификаторыОбъектовМетаданных. Это критично, так как все связи в подсистеме доступа БСП строятся именно на идентификаторах, а не на именах объектов.

Тонкости отладки шаблонов в ролях

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


#ПоЗначению("Документ.НашНовыйДокумент", "Чтение", "", "Организация", "Организация", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")

Проанализируем ситуацию: если вы используете производительный режим, шаблон #ПоЗначению внутри себя трансформируется в запрос к таблицам ключей доступа. Если в модуле менеджера в процедуре ПриЗаполненииОграниченияДоступа вы указали РазрешитьЧтениеИзменение, убедитесь, что в роли ограничения прописаны и на Чтение, и на Изменение. Если на Изменение ограничение не задано, а шаблон требует проверки обоих прав, может возникнуть коллизия, при которой система разрешит полный доступ. Для поиска таких коллизий и анализа назначений можно использовать инструмент для аудита прав и выявления конфликтов ролей в БСП.

Регламентные задания и очередь обновления

Выясним причину задержки применения прав. В производительном режиме расчет ключей часто происходит асинхронно. За это отвечает регламентное задание «Обновление ключей доступа». Если оно выключено или зависло, то после создания нового документа или изменения настроек прав система «не увидит» изменений еще долгое время.

Проверьте регистр «Объекты для обновления прав доступа». Если в нем накопилось много записей, значит, фоновое задание не справляется. Для отладки в тестовой базе можно выполнить расчет ключей доступа в явном виде, используя программный вызов:

УправлениеДоступом.ОбновитьКлючиДоступа(ПараметрыОбновления);

После выполнения этой команды записи в регистрах ключей должны актуализироваться, и ограничения RLS в списках документов начнут работать корректно. Для оперативного обновления прав конкретного пользователя или группы подойдёт обработка для точечного пересчета прав доступа в БСП.

← На главную