Почему не срабатывает ограничение доступа на уровне записей (RLS) в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет
← К списку

Механизм ограничения доступа на уровне записей (RLS – Record Level Security) в 1С — это мощный инструмент, позволяющий гибко управлять видимостью и возможностью редактирования данных для разных пользователей, не затрагивая весь объект целиком. Однако его некорректная работа часто вызывает вопросы. Давайте вместе разберемся, почему RLS может работать не так, как мы ожидаем, и как это исправить.

1. Конфликт ролей и кумулятивность прав доступа

Одна из наиболее частых причин некорректной работы RLS — это конфликт прав, предоставляемых различными ролями, назначенными пользователю.

Система 1С работает по принципу кумулятивности прав: если у пользователя назначено несколько ролей, и хотя бы одна из них предоставляет полный доступ к объекту (например, справочнику или документу) без каких-либо ограничений RLS, то эти ограничения не будут действовать для пользователя. Система всегда выбирает наиболее широкие права.

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

Мы выясним, что архитектура RLS в 1С строится по цепочке: РольПрофиль групп пользователяГруппа доступаПользователь. Важно проверять все звенья этой цепочки, чтобы найти источник избыточных прав.

2. Неправильная настройка RLS для типа объекта или отсутствие необходимых реквизитов

Мы часто сталкиваемся с тем, что RLS может не срабатывать из-за особенностей настройки самого объекта, к которому применяется ограничение.

Давайте проанализируем ситуацию: RLS может применяться как к документам, так и к справочникам. Однако для корректной работы ограничения по определенному критерию (например, по организации) сам объект (например, Справочник или Документ) должен содержать соответствующий реквизит. Например, если мы хотим ограничить доступ к элементам справочника по организации, то в этом справочнике обязательно должен быть реквизит типа СправочникСсылка.Организации или аналогичный.

Посмотрим на пример: если мы настраиваем ограничение по организации для справочника, но в справочнике отсутствует реквизит Организация, то система не сможет применить условие RLS, так как ей не на что будет опираться. В некоторых случаях, при настройке RLS для справочников, может потребоваться наличие специального реквизита, например, Доступ, который используется для связывания записи с правилами доступа.

Ограничения RLS задаются в виде шаблонов в ролях. Эти шаблоны представляют собой логические выражения на встроенном языке 1С, которые могут использовать параметры сеанса (например, &ТекущийПользователь). Эти шаблоны преобразуются в условия SQL-запросов. Если шаблон ссылается на несуществующий реквизит или некорректно составлен, RLS не сработает.

Предположим, наш шаблон RLS для справочника Контрагенты выглядит так:


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

В этом примере критически важно, чтобы в справочнике Контрагенты был реквизит Организация.

3. Неактивированный механизм RLS или некорректная инициализация

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

Разберем по шагам:

  1. Перейдите в раздел Администрирование.
  2. Выберите Настройки пользователей и прав.
  3. Убедитесь, что установлен флажок Ограничивать доступ на уровне записей. Без этого флажка RLS просто не будет работать.

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

Для RLS, основанного на определенных аналитиках (например, организация, ЦФО, проект), может потребоваться выполнение регламентного задания Заполнение данных для ограничения доступа. Это задание создает или обновляет ключи доступа к новым элементам, что критически важно для корректной работы RLS.

4. Ошибки в пользовательских доработках и конфигурациях

Мы часто вносим изменения в типовые конфигурации, и эти доработки могут стать причиной проблем с RLS.

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

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

5. Инструменты для диагностики и дополнительные рекомендации

Для эффективного выявления причин несрабатывания RLS, мы можем использовать следующие инструменты и подходы:

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

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

← К списку