Как ограничить просмотр персональных данных на формах справочников Физические лица и Сотрудники в 1С:ERP?

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

Защита персональных данных (ПДн) является критически важной задачей при настройке прав доступа в современных корпоративных системах, таких как 1С:ERP Управление предприятием или 1С:Комплексная автоматизация. Часто возникает ситуация, когда пользователю (например, менеджеру по продажам или кладовщику) необходимо видеть ФИО физического лица для выбора в документах, но при этом доступ к чувствительной информации (ИНН, СНИЛС, паспортные данные, домашний адрес или размер оклада) должен быть строго ограничен — поможет инструмент для скрытия персональных данных и зарплат.

Типовая подсистема БСП «Защита персональных данных» отлично справляется с регистрацией событий доступа и уничтожением данных, но она не предназначена для динамического управления видимостью полей на формах. В этой статье мы разберем несколько эффективных способов реализации ограничения доступа к ПДн, начиная от простых настроек прав и заканчивая использованием механизмов расширений.

Метод 1. Программное скрытие элементов формы через расширение

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

Рассмотрим пошаговую реализацию этого метода (кстати, добавление реквизитов и элементов формы можно выполнять и без сложного кодирования):

  1. Создадим в расширении новую роль, например, ЧтениеПерсональныхДанныхФизЛиц. Эта роль будет служить «маркером»: если она назначена пользователю, он видит данные, если нет — данные скрыты.
  2. В расширении перехватим процедуру ПриСозданииНаСервере для форм справочников ФизическиеЛица и Сотрудники.
  3. Проанализируем права текущего пользователя и установим видимость элементов.

Пример программного кода в расширении для формы физического лица:


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

Важный нюанс: Чтобы этот метод работал корректно, рекомендуется предварительно сгруппировать все чувствительные реквизиты в отдельные группы на форме в конфигураторе (если они еще не сгруппированы), чтобы управлять видимостью всей группы разом. Также можно использовать готовое решение для настройки доступности элементов формы.

Метод 2. Ограничение доступа на уровне полей (Field-level Security)

Платформа 1С позволяет настраивать права доступа не только к объекту в целом, но и к его отдельным реквизитам. Это мощный инструмент, который работает на уровне ядра системы. Если у пользователя в роли снята галочка Просмотр для реквизита ИНН, платформа автоматически уберет это поле со всех форм, из списков и даже из результатов отчетов.

Разберем алгоритм настройки:

  1. Найдем роль, которая дает право на чтение справочника (например, ЧтениеФизическихЛиц). Провести анализ и сравнение ролей можно с помощью специальных обработок — для этого подойдёт утилита для анализа и сравнения ролей.
  2. Поскольку типовые роли изменять нельзя, скопируем её в свое расширение или создадим новую.
  3. В дереве объектов роли раскроем справочник ФизическиеЛица и перейдем к списку реквизитов.
  4. Снимем флажки Просмотр и Редактирование для полей: ИНН, СтраховойНомерПФР и других.

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

Метод 3. Отключение печатных форм с персональными данными

Даже если мы скрыли поля на форме, пользователь может попытаться извлечь данные через печатные формы (например, Личная карточка Т-2 или Согласие на обработку ПДн). В БСП управление командами печати реализовано централизованно.

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


&НаСервере
Процедура Расш1_ПередДобавлениемКомандПечати(ИмяФормы, КомандыПечати, СтандартнаяОбработка)
    
    Если Не РольДоступна("ЧтениеПерсональныхДанныхФизЛиц") Тогда
        // Ищем и удаляем команды печати, содержащие ПДн
        Индекс = КомандыПечати.Количество() - 1;
        Пока Индекс >= 0 Цикл
            Команда = КомандыПечати[Индекс];
            Если Команда.Идентификатор = "КарточкаТ2" Или Команда.Идентификатор = "Т1" Тогда
                КомандыПечати.Удалить(Индекс);
            КонецЕсли;
            Индекс = Индекс - 1;
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры

Этот подход позволяет не «кромсать» саму форму, а динамически управлять составом кнопки Печать в зависимости от прав текущего сеанса. Аналогично настраивается управление доступом печати для других типов документов.

Метод 4. Использование функциональных опций для интерфейса

Рассмотрим еще один элегантный способ — привязку видимости элементов формы к Функциональным опциям. Это позволяет избежать написания кода в каждой форме.

Выполним следующие шаги:

  1. Создадим константу ИспользоватьОграничениеПДн (типа Булево).
  2. Создадим Функциональную Опцию, связанную с этой константой.
  3. В свойствах элементов формы (поля ввода ПДн) в поле Функциональные опции укажем нашу созданную опцию.
  4. При начале работы системы будем программно устанавливать значение параметра сеанса, от которого зависит эта опция, на основании ролей пользователя.

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

Рекомендации по безопасности

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

Таким образом, наиболее надежным решением будет комбинация Метода 1 (для эстетичного вида форм) и Метода 2 (для обеспечения реальной безопасности данных на уровне запросов к базе данных).

← На главную