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

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

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

Шаг 1. Анализ записей в технических регистрах

Механизм производительного RLS базируется на предварительно рассчитанных ключах доступа. Если система «решает», что пользователю разрешено все, она просто не создает записи в определенных регистрах, и стандартный запрос RLS возвращает Истина для всех строк. Проанализируем ситуацию с помощью консоли запросов. Основной интерес представляют регистры КлючиДоступаКОбъектам и КлючиДоступаПользователей.

Выполним следующий проверочный запрос, чтобы понять, сформированы ли ключи для конкретного пользователя и целевого справочника:


ВЫБРАТЬ
    КлючиДоступаКОбъектам.Объект,
    КлючиДоступаПользователей.Пользователь
ИЗ
    РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК КлючиДоступаПользователей
        ПО КлючиДоступаКОбъектам.КлючДоступаПользователей = КлючиДоступаПользователей.КлючДоступа
ГДЕ
    КлючиДоступаПользователей.Пользователь = &Пользователь
    И КлючиДоступаКОбъектам.Объект = &ЦелевойСправочник

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

Шаг 2. Проверка ролей на «Безусловный доступ»

Разберем самую частую причину: наличие у пользователя роли, которая дает право Чтения или Изменения объекта без использования шаблонов ограничений. В 1С права суммируются по принципу «Разрешено все, что разрешено хотя бы в одной роли».

Проанализируем состав ролей в профиле руководителя. Даже если в 99% ролей прописаны шаблоны RLS, наличие хотя бы одной роли (например, технической или вспомогательной), где на справочник Договоры дано право «Чтение» без ограничений, приведет к тому, что БСП перестанет вычислять ключи для этого пользователя. Система оптимизирует запросы: зачем проверять ключи доступа, если у пользователя и так есть полное право по метаданным?

Шаг 3. Влияние прав на справочники-разделители

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

Посмотрим на пример из практики: у группы доступа руководителей была роль на изменение справочника ГруппыДоступаДоговоровЗайма. Как только эта роль была активна, RLS по договорам переставал работать. Это происходит потому, что право изменять логику самого ограничения (то есть разделитель) часто приравнивается к полному доступу к данным, которые этот разделитель защищает.

Шаг 4. Обновление вспомогательных данных

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

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

Также стоит проверить состояние регламентного задания ОбновлениеДоступаНаУровнеЗаписей. Если очередь обновления (регистр ОчередьОбновленияДоступа) переполнена или зависла, новые ключи для руководителей просто не будут рассчитаны.

Шаг 5. Метод «Изоляции роли» (Диагностика перебором)

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

  1. Создадим тестового пользователя и скопируем ему состав ролей обычного сотрудника (у которого RLS работает).
  2. Убедимся, что ограничения действуют.
  3. Начнем по одной добавлять роли, которые есть у руководителя, но нет у рядового сотрудника.
  4. После добавления каждой роли проверяем работу RLS (не забывая обновлять сеанс или вызывать процедуру обновления прав).
  5. На той роли, после которой данные «откроются», и кроется проблема. Исследуйте права этой роли на чтение и изменение целевых объектов в конфигураторе.

Шаг 6. Настройка доступа «По умолчанию»

Проанализируем настройки самого Профиля группы доступа. В БСП есть два режима:

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

Резюме для разработчика

При поиске причин «прозрачности» RLS всегда проверяйте:

  1. Отсутствие ролей с неограниченным правом Чтение на объект.
  2. Права на редактирование объектов-владельцев настроек (разделителей).
  3. Наличие записей в РегистрСведений.НаборыЗначенийДоступа для самого объекта (если там пусто, значит, объект вообще не участвует в системе производительного RLS).
  4. Состояние фоновых заданий по расчету прав.

Использование этих методов позволит вам быстро локализовать ошибку в настройке прав и вернуть систему в защищенное состояние.

← На главную