Приветствуем вас! В процессе администрирования и тонкой настройки прав доступа в крупных корпоративных системах на базе 1С:Предприятие (таких как 1С:ERP Управление предприятием 2 или 1С:Комплексная автоматизация) администраторы часто сталкиваются со следующей задачей: необходимо запретить определенным пользователям добавлять новые файлы к документам, сохранив за ними право просматривать уже прикрепленные вложения.
Казалось бы, задача простая, но попытка решить ее с помощью настройки стандартной роли Добавление и изменение папок и файлов не приносит желаемого результата. В этой статье мы подробно разберем, почему так происходит, проанализируем архитектуру Библиотеки стандартных подсистем (БСП) и пошагово реализуем надежное решение с помощью механизмов расширения конфигурации.
Давайте выясним причину, по которой привычные методы настройки прав дают сбой. В конфигурациях, построенных на БСП, подсистема работы с файлами разделена на два независимых контура:
Добавление и изменение папок и файлов. На присоединенные к документам файлы она никак не влияет.[ИмяОбъекта]ПрисоединенныеФайлы.Согласно официальной концепции разработчиков фирмы «1С», управление доступом к присоединенным файлам жестко связано с правами на сам объект-владелец (документ или справочник). Если у пользователя есть роль на изменение самого документа, система автоматически предоставляет ему полные права на добавление, редактирование и удаление файлов в подчиненном справочнике присоединенных файлов. Выделить право «только на просмотр» прикрепленных файлов стандартными ролями «из коробки» невозможно.
Тем не менее, решить эту задачу можно несколькими способами. Рассмотрим их подробнее.
Если конфигурацию изменять нельзя, а использовать механизмы расширения нет возможности, можно применить временную административную меру — скрыть элементы управления интерфейса для нужных пользователей:
Важное предупреждение: данный метод является исключительно визуальным. Он не защищает базу данных от записи на программном уровне. Опытный пользователь все еще сможет обойти это ограничение через групповые обработки или внешние отчеты. Для обеспечения полной безопасности необходимо использовать программные методы.
Наиболее надежный и правильный способ с точки зрения безопасности — пресекать попытку добавления нового файла непосредственно в момент его записи в базу данных. Поскольку ERP находится на поддержке, реализуем это через расширение конфигурации.
Давайте разберем этот процесс по шагам:
РазрешеноДобавлениеФайлов. Эту роль мы назначим тем пользователям, у которых должно остаться право прикреплять файлы.ЗаказКлиентаПрисоединенныеФайлы).ПередЗаписью для этого справочника.Рассмотрим пример кода, который необходимо прописать в модуле объекта присоединенного файла в расширении:
&После("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ)
// Проверяем, является ли записываемый объект новым (т.е. происходит попытка добавления файла)
Если ЭтотОбъект.ЭтоНовый() Тогда
// Проверяем, доступна ли пользователю специализированная роль
Если Не РольДоступна("РазрешеноДобавлениеФайлов") Тогда
Отказ = Истина;
ВызватьИсключение "У вас нет прав на добавление присоединенных файлов к этому документу!";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот способ гарантирует 100% защиту. Даже если пользователь попытается загрузить файл программно или путем перетаскивания (Drag-and-Drop) в форму, транзакция записи будет отменена на уровне платформы.
Чтобы сделать интерфейс системы более дружелюбным, мы можем заблокировать кнопки добавления и изменения файлов непосредственно на форме их списка. Для этого нам нужно перехватить создание формы присоединенных файлов.
В БСП за вывод списка файлов отвечает общая форма ПрисоединенныеФайлы, а перехватить ее создание можно через общий переопределяемый модуль БСП. Выполним следующие действия:
РаботаСФайламиПереопределяемый.ПриСозданииФормыСпискаФайлов.Рассмотрим пример реализации кода в расширении общего модуля:
&После("ПриСозданииФормыСпискаФайлов")
Процедура Расш1_ПриСозданииФормыСпискаФайлов(Форма)
// Проверяем наличие ограничивающей роли или отсутствие разрешающей
Если Не РольДоступна("РазрешеноДобавлениеФайлов") Тогда
// Устанавливаем режим "Только просмотр" для всей формы списка файлов
Форма.ТолькоПросмотр = Истина;
// Дополнительно деактивируем элементы управления добавлением файлов
Если Форма.Элементы.Найти("ГруппаКомандФайлы") <> Неопределено Тогда
Форма.Элементы.ГруппаКомандФайлы.Доступность = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
При таком подходе пользователи без соответствующей роли по-прежнему смогут открывать форму присоединенных файлов и просматривать их содержимое, однако все кнопки добавления, создания по шаблону и загрузки новых версий файлов станут неактивными.
Мы проанализировали особенности работы с правами доступа к прикрепленным файлам в 1С:ERP 2. Подводя итоги, дадим несколько рекомендаций: