При настройке разграничения прав доступа на уровне записей (RLS) к справочнику Контрагенты администраторы нередко сталкиваются с ситуацией, когда редактирование чужих контрагентов успешно блокируется, но в списках и журналах пользователь продолжает видеть абсолютно все записи. Разберем детально, как устроен механизм RLS для контрагентов, почему возникает нежелательная видимость данных и как по шагам настроить полный запрет на просмотр чужих контрагентов.
В типовых конфигурациях на обычных формах (таких как УПП и КА ред. 1.3) механизм ограничения прав на уровне записей для справочника контрагентов разделен на несколько логических областей доступа:
Контрагенты.Если цель состоит в том, чтобы менеджер видел исключительно свою клиентскую базу и не имел информации о существовании чужих клиентов, необходимо обеспечить корректную изоляцию на всех трех уровнях.
Проанализируем распространенные конфигурационные и пользовательские ошибки, из-за которых наложенные ограничения не срабатывают на чтение и просмотр:
Справочник.Контрагенты установлено право Чтение без прописанного шаблона RLS (или роль ПолныеПрава), ограничение других ролей полностью нивелируется, и пользователь видит все данные.ГруппаДоступаККонтрагенту. Если у части контрагентов этот реквизит пустой, система считает их общедоступными (если в настройках прав пустая группа явно не ограничена).Разберем последовательность действий, которая позволит корректно скрыть чужих контрагентов от пользователей.
Администрирование пользователей, откроем меню Доступ на уровне записей — Параметры. Убедимся, что установлен общий флаг Использовать ограничения прав доступа на уровне записей, а в таблице видов объектов взведена отметка для вида Контрагенты.Пользователи, выберем нужного сотрудника и перейдем в Группы пользователя. Проверим, что пользователь входит строго в одну группу (например, «Менеджеры»), для которой настраиваются ограничения.Полные права. Если используются нестандартные или вспомогательные роли, откроем конфигуратор и проверим права на Справочник.Контрагенты: право Чтение должно либо отсутствовать, либо содержать шаблон ограничения #ПоГруппамКонтрагентов.Контрагенты проверим заполнение реквизита ГруппаДоступаККонтрагенту. Для массового назначения удобно воспользоваться обработкой Групповая обработка справочников и документов, заполнив реквизит соответствующими группами («Покупатели», «Поставщики» и др.).Контрагенты добавим разрешенные группы доступа и снимем галочки просмотра для запрещенных групп и для строки <Пустое значение>.Если использование тяжелого механизма RLS нежелательно из-за высокой нагрузки на СУБД или конфликтов в закрытых периодах, рассмотрим вариант программной фильтрации списка контрагентов в модуле формы списка справочника.
Посмотрим на пример установки фиксированного отбора по текущему пользователю в процедуре ПриОткрытии формы списка:
Процедура ПриОткрытии()
Если Не РольДоступна("ПолныеПрава") Тогда
Отбор = СправочникСписок.Отбор;
Если Отбор.Найти("ОсновнойМенеджерПокупателя") <> Неопределено Тогда
Отбор.ОсновнойМенеджерПокупателя.Значение = глТекущийПользователь;
Отбор.ОсновнойМенеджерПокупателя.ВидСравнения = ВидСравнения.Равен;
Отбор.ОсновнойМенеджерПокупателя.Использование = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Такой подход скрывает лишних контрагентов в интерфейсе выбора и списка, не перегружая запросы СУБД сложными соединениями механизма RLS.