Как настроить RLS по подразделениям в 1С:УНФ и почему ограничение прав может не работать?

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

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

Пошаговая реализация нового вида доступа по подразделениям

Для внедрения нового вида доступа на базе БСП выполним следующую последовательность действий:

  1. Создание справочника групп доступа: добавим в конфигуратор справочник ГруппыДоступаСтруктурнойЕдиницы.
  2. Связывание с объектом доступа: в справочник СтруктурныеЕдиницы (или Подразделения) добавим реквизит ГруппаДоступа с типом ссылки на созданный справочник.
  3. Настройка определяемых типов: включим новые объекты в определяемый тип ЗначениеДоступаСГруппамиЗначенийДоступаОбъект для автоматического отслеживания изменений подпиской ОбновитьГруппыЗначенийДоступа.
  4. Регистрация вида доступа в коде: в общем модуле УправлениеДоступомПереопределяемый опишем новый вид доступа и состав прав.

Посмотрим на пример заполнения процедур в модуле УправлениеДоступомПереопределяемый:


Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт

    ВидДоступа = ВидыДоступа.Добавить();
    ВидДоступа.Имя = "ГруппыПодразделений";
    ВидДоступа.Представление = НСтр("ru = 'Группы подразделений'");
    ВидДоступа.ТипЗначений = Тип("СправочникСсылка.СтруктурныеЕдиницы");
    ВидДоступа.ТипГруппЗначений = Тип("СправочникСсылка.ГруппыДоступаСтруктурнойЕдиницы");

КонецПроцедуры

Процедура ПриЗаполненииИспользованияВидаДоступа(ВидДоступа, Использование) Экспорт

    Если ВидДоступа = "ГруппыПодразделений" Тогда
        Использование = Истина;
    КонецЕсли;

КонецПроцедуры

Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт

    Описание = Описание + "
    |Справочник.СтруктурныеЕдиницы.Чтение.ГруппыПодразделений
    |Справочник.СтруктурныеЕдиницы.Изменение.ГруппыПодразделений";

КонецПроцедуры

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


#ПоЗначениям("Справочник.СтруктурныеЕдиницы", "Чтение", "", "ГруппыПодразделений", "Ссылка", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")

Для инициализации параметров ограничений в режиме 1С:Предприятие выполним служебный метод обновления параметров:

УправлениеДоступомСлужебный.ОбновитьПараметрыОграниченияДоступа(Истина, Ложь);

Почему RLS не работает: анализ частых причин и ошибок

Если после выполнения всех настроек пользователь всё равно видит закрытые документы и элементы справочников, проанализируем следующие ключевые моменты:

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

Альтернативные варианты ограничения видимости

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

  1. Интерфейсный отбор в динамических списках: в формах списков документов программно устанавливается фиксированный отбор по разрешенным подразделениям текущего пользователя с отключением возможности снять этот отбор пользователем. Это решает задачу сокрытия лишней информации без накладных расходов СУБД.
  2. Контроль в подписках на события: для запрета создания и изменения документов чужих подразделений проверку прав можно выполнять в подписке на событие ПередЗаписью или ОбработкаПроведения, выдавая пользователю предупреждение и отменяя транзакцию.
← На главную