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