Как в 1С:Документооборот 3.0 запретить доступ к вложенным файлам документа, сохранив доступ к его карточке

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот Управленческий учет
← На главную

В процессе работы с системой 1С:Документооборот 3.0 часто возникает специфическая задача: необходимо сделать так, чтобы пользователи могли видеть карточку документа (например, договора), использовать её для создания связей с другими документами (заказами, актами), но при этом не имели возможности открывать или просматривать сами прикрепленные файлы (сканы, тексты договоров с конфиденциальными суммами). По умолчанию в системе права на чтение документа автоматически дают право на чтение всех его файлов. Рассмотрим подробнее, как можно обойти это ограничение и реализовать раздельный доступ.

Метод 1. Программное ограничение через расширение конфигурации

Проанализируем самый гибкий способ — использование расширения. Нам необходимо перехватить действия пользователя в форме карточки документа и в общих списках файлов. Основная логика заключается в проверке наличия у пользователя определенной роли или дополнительного реквизита, разрешающего доступ к конфиденциальным данным. Для быстрого назначения добавленных прав пользователям информационной базы подойдёт обработка для назначения ролей расширений.

Разберем по шагам реализацию в форме элемента документа. Нам нужно воздействовать на список файлов, который отображается в карточке. Одним из вариантов является обработка события при активизации строки или попытке открытия файла.

Рассмотрим пример кода, который можно внедрить в расширение для формы элемента документа (Справочник.ДокументыПредприятия.ФормаЭлемента):


&НаКлиенте
Процедура ххх_ФайлыПриАктивизацииСтрокиПеред(Элемент)
    // Получаем текущие данные выбранного файла
    ТекущиеДанные = Элемент.ТекущиеДанные;
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;

    // Проверяем наличие специальной роли у пользователя
    Если НЕ РольДоступна("ПросмотрКонфиденциальныхФайлов") Тогда
        // Если файл помечен как секретный или это основной файл договора
        // Здесь можно добавить проверку по категории файла или его роли
        Элемент.ТолькоПросмотр = Истина;
        // Дополнительно можно скрыть кнопки открытия и редактирования
    КонецЕсли;
КонецПроцедуры

Важно понимать, что блокировка только в форме карточки документа — это не полная защита. Пользователь может попытаться открыть файл через общий список Все файлы или через отчеты. Поэтому необходимо также перехватить команду открытия файла в глобальном модуле или через подписку на события.

Метод 2. Настройка RLS на справочник версий файлов

Этот метод является наиболее надежным с точки зрения безопасности, так как ограничение работает на уровне платформы (Record Level Security). Выясним причину, почему это эффективно: система проверяет права доступа непосредственно при выполнении запроса к базе данных.

Проанализируем ситуацию: файлы в 1С:ДО 3.0 хранятся в справочнике Файлы, а их содержимое — в справочнике ВерсииФайлов. Чтобы запретить чтение содержимого, нам нужно настроить RLS именно на Справочник.ВерсииФайлов.

  1. Зайдем в настройки прав доступа и создадим новый профиль групп доступа.
  2. В ограничениях доступа выберем объект Версии файлов.
  3. Установим условие, при котором чтение версии разрешено только в том случае, если документ-владелец не является конфиденциальным, либо если у пользователя есть соответствующее разрешение.

Важный нюанс: Использование RLS может существенно снизить производительность системы, если количество файлов исчисляется миллионами. Перед внедрением на продуктивной базе обязательно протестируйте скорость открытия списков документов.

Метод 3. Использование механизма «Роли файлов» в ДО 3.0

В новой версии 3.0 появился функционал ролей файлов (например: «Оригинал», «Скан», «Приложение»). Мы можем использовать это для логического разделения доступа. Посмотрим, как это реализовать:

Мы можем назначить всем конфиденциальным файлам определенную роль. Далее, через программную доработку в механизме ПриСозданииНаСервере для формы документа, мы будем проверять: если в списке файлов есть объекты с ролью «Секретно», мы программно скрываем колонки или блокируем доступ к этим строкам для пользователей без специальных прав.

Метод 4. Штатное шифрование файлов

Если требуется обеспечить максимальную защиту без серьезного программирования, рассмотрим функционал шифрования. В 1С:Документооборот 3.0 можно настроить обязательное шифрование файлов для определенных видов документов.

Как это работает в контексте нашей задачи:

Этот способ хорош тем, что он «коробочный», но требует настройки криптографии на рабочих местах пользователей, что не всегда удобно в крупных организациях.

Метод 5. Визуальное скрытие закладки «Файлы»

Рассмотрим вариант, когда нам нужно просто скрыть визуальное присутствие файлов в интерфейсе для определенных групп пользователей. Это не является защитой от взлома, но отлично решает задачу «защиты от любопытства».

В расширении для формы документа можно использовать следующий подход:


&НаСервере
Процедура ххх_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Проверяем, входит ли пользователь в группу доступа к файлам договора
    ДоступРазрешен = ПроверитьДоступКФайлам(Объект.Ссылка); 
    
    Если НЕ ДоступРазрешен Тогда
        // Ищем элемент формы, отвечающий за отображение файлов
        ЭлементФайлы = Автотесты.НайтиЭлементФормы(ЭтаФорма, "ГруппаФайлы");
        Если ЭлементФайлы <> Неопределено Тогда
            ЭлементФайлы.Видимость = Ложь;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

При таком подходе пользователь работает с карточкой в обычном режиме, но закладка с файлами для него просто отсутствует. При этом в связях других документов этот договор будет виден, и пользователь сможет в него перейти.

Резюме и рекомендации

Выясним, какой метод лучше выбрать в зависимости от требований:

  1. Если нужна максимальная безопасность и есть ресурсы сервера — выбираем RLS.
  2. Если нужно быстрое решение для интерфейса — используем скрытие закладок в расширении.
  3. Если данные критически важны и к ним не должен иметь доступ даже администратор базы данных — используем шифрование.

Помните, что в ДО 3.0 права на документы очень тесно переплетены, поэтому любое изменение логики доступа к файлам должно сопровождаться тщательным тестированием на правах обычного пользователя, а не только администратора.

← На главную