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