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