В типовых конфигурациях 1С:ERP Управление предприятием, 1С:Комплексная автоматизация и 1С:Управление торговлей 11 механизм ограничения прав на уровне записей (RLS) для номенклатуры по умолчанию действует только на права Добавление и Изменение. Право Чтение в типовых ролях остается открытым. В результате менеджеры видят полный перечень товаров, материалов и услуг всех подразделений компании. Разберем, почему так сделано, как корректно настроить ограничение на чтение через роли и какие альтернативные варианты решения задачи существуют.
Проанализируем технические причины, по которым разработчики типовых конфигураций не ограничивают чтение номенклатуры из коробки:
Номенклатура задействован практически во всех товарных документах, регистрах накопления и отчетах. Динамическое наложение условий RLS на чтение каждой строки запроса существенно усложняет планы выполнения SQL-запросов.Если задача жесткого скрытия чужих позиций является обязательной, настроим ограничение через роли подсистемы БСП. Разберем реализацию по шагам.
Шаг 1. Настройка шаблона RLS для справочника «Номенклатура»
Откроем конфигуратор, найдем типовую роль чтения номенклатуры (например, ЧтениеИнформацииПоНоменклатуре) или создадим ее копию в расширении. Для права Чтение справочника Справочник.Номенклатура укажем шаблон ограничения доступа по значениям:
#ПоЗначениям( "Справочник.Номенклатура","Чтение","",
"ГруппыНоменклатуры","Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
Шаг 2. Настройка ограничения для справочника «Группы доступа номенклатуры»
Для корректного сопоставления групп доступа и исключения чтения значений классификатора настроим аналогичное ограничение на чтение для справочника Справочник.ГруппыДоступаНоменклатуры:
#ПоЗначениям( "Справочник.ГруппыДоступаНоменклатуры","Чтение","",
"ГруппыНоменклатуры","Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
Шаг 3. Регистрация видов ограничений в модулях БСП (при необходимости)
Проверим регистрацию состава ограничений в общем модуле подсистемы управления доступом. В процедуре ПриЗаполненииВидовОграниченийПравОбъектовМетаданных убедимся в наличии строки:
|Справочник.Номенклатура.Чтение.ГруппыНоменклатуры
Шаг 4. Устранение конфликта прав (дизъюнкция прав доступа)
В платформе 1С действует принцип: любое полное право перекрывает ограниченное. Если у пользователя назначено несколько ролей и хотя бы в одной из них право Чтение на Справочник.Номенклатура не ограничено условием RLS, пользователь продолжит видеть всю номенклатуру.
Проанализируем все назначенные пользователю профили и роли:
Номенклатура, ХарактеристикиНоменклатуры и СерииНоменклатуры.Чтение ограничено шаблоном #ПоЗначениям либо полностью отключено, если роль не критична.Шаг 5. Настройка профилей и групп доступа в режиме предприятия
В пользовательском режиме в справочнике Профили групп доступа для вида доступа Группы номенклатуры установим значение «Запрещены все, исключения назначаются в группах доступа». В соответствующих Группах доступа добавим только те группы номенклатуры, с которыми разрешено работать конкретным менеджерам.
Чтобы избежать падения производительности и ошибок в отчетах или документах прошлых периодов, рассмотрим альтернативные варианты решения задачи без наложения RLS на чтение:
В модуле менеджера справочника Номенклатура переопределим обработчик ОбработкаПолученияДанныхВыбора, наложив программный отбор по разрешенным для текущего пользователя группам. В формах списка и выбора справочника установим фиксированный отбор в процедуре ПриСозданииНаСервере.
Разделим номенклатуру по периодическим или динамическим Сегментам номенклатуры. В Индивидуальных соглашениях об условиях продаж закрепим разрешенный сегмент за конкретным менеджером или подразделением. В результате менеджеры смогут выбирать в документах продажи только ту номенклатуру, которая входит в назначенный им сегмент.