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