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