Как скрыть контрагентов и ограничить их просмотр в 1С через RLS

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

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

Принцип работы прав доступа к контрагентам

В типовых конфигурациях на обычных формах (таких как УПП и КА ред. 1.3) механизм ограничения прав на уровне записей для справочника контрагентов разделен на несколько логических областей доступа:

  1. Контрагенты (список) — отвечает за видимость элементов непосредственно в динамических списках и формах выбора справочника Контрагенты.
  2. Контрагенты (доп. информация) — регулирует чтение и запись сведений внутри самого элемента (контактные лица, банковские счета, договоры и контактная информация).
  3. Контрагенты (данные) — управляет доступом к связанным объектам конфигурации (документам продаж и покупок, движениям по регистрам взаиморасчетов, отчетам).

Если цель состоит в том, чтобы менеджер видел исключительно свою клиентскую базу и не имел информации о существовании чужих клиентов, необходимо обеспечить корректную изоляцию на всех трех уровнях.

Анализ типовых причин, почему контрагенты остаются видимыми

Проанализируем распространенные конфигурационные и пользовательские ошибки, из-за которых наложенные ограничения не срабатывают на чтение и просмотр:

  1. Наличие роли без ограничения RLS. В платформе 1С права доступа нескольких ролей объединяются по логическому условию ИЛИ. Если пользователю назначена хотя бы одна дополнительная роль, в которой для справочника Справочник.Контрагенты установлено право Чтение без прописанного шаблона RLS (или роль ПолныеПрава), ограничение других ролей полностью нивелируется, и пользователь видит все данные.
  2. Вхождение пользователя в несколько групп пользователей. Если сотрудник включен одновременно в две группы пользователей, права этих групп суммируются. Наличие хотя бы одной группы без ограничений откроет доступ ко всему справочнику.
  3. Не заполнен реквизит группы доступа у контрагентов. В карточке каждого контрагента присутствует реквизит ГруппаДоступаККонтрагенту. Если у части контрагентов этот реквизит пустой, система считает их общедоступными (если в настройках прав пустая группа явно не ограничена).
  4. Отключено использование RLS для вида объекта. Механизм RLS требует явного включения как на уровне всей информационной базы, так и для конкретного вида данных.
  5. Кэширование параметров сеанса. После корректировки состава групп или профилей полномочий изменения не применяются к открытым сеансам автоматически — требуется обязательный перезапуск программы.

Пошаговая инструкция по настройке RLS для контрагентов

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

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

Альтернативный вариант: программный отбор в списках

Если использование тяжелого механизма RLS нежелательно из-за высокой нагрузки на СУБД или конфликтов в закрытых периодах, рассмотрим вариант программной фильтрации списка контрагентов в модуле формы списка справочника.

Посмотрим на пример установки фиксированного отбора по текущему пользователю в процедуре ПриОткрытии формы списка:


Процедура ПриОткрытии()
    Если Не РольДоступна("ПолныеПрава") Тогда
        Отбор = СправочникСписок.Отбор;
        Если Отбор.Найти("ОсновнойМенеджерПокупателя") <> Неопределено Тогда
            Отбор.ОсновнойМенеджерПокупателя.Значение = глТекущийПользователь;
            Отбор.ОсновнойМенеджерПокупателя.ВидСравнения = ВидСравнения.Равен;
            Отбор.ОсновнойМенеджерПокупателя.Использование = Истина;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Такой подход скрывает лишних контрагентов в интерфейсе выбора и списка, не перегружая запросы СУБД сложными соединениями механизма RLS.

← На главную