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