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