При разработке интерфейсов на платформе 1С:Предприятие 8.3, особенно для публичных решений или информационных киосков, часто возникает задача ограничить доступ пользователя к файловой системе. Одной из «уязвимостей» является стандартное контекстное меню поля картинки, которое позволяет выбрать пункт «Сохранить как...». Через открывшееся окно проводника пользователь может получить доступ к дискам сервера или локальной машины. В этой статье мы подробно разберем, как полностью заблокировать эту возможность, сохранив при этом эстетичный вид формы.
Проанализируем самый простой и быстрый способ, который предоставляет сама платформа в конфигураторе. Каждое поле формы по умолчанию имеет контекстное меню, которое наполняется стандартными командами: «Посмотреть», «Сохранить как», «Выбрать из файла» и т.д. Мы можем управлять этим поведением напрямую.
Разберем по шагам, как это сделать:
ПолеКартинки.Автозаполнение и снимем с него флажок (установим значение Ложь).После этих действий при нажатии правой кнопкой мыши на картинку в режиме «1С:Предприятие» меню либо не появится вовсе, либо будет содержать только те команды, которые мы добавим туда вручную. Это решает основную проблему — исключает появление системного диалога сохранения файла.
Иногда возникают ситуации, когда стандартное отключение меню по каким-то причинам не срабатывает (например, в специфических веб-клиентах или старых релизах платформы). Рассмотрим более «хитрый» графический метод — перекрытие изображения прозрачным слоем. Выясним, в чем его преимущество.
Суть заключается в том, что мы размещаем поверх ПоляКартинки другой элемент — Декорацию (вид: Надпись), который будет принимать на себя все клики мышью. Поскольку у декорации-надписи по умолчанию нет команд сохранения картинки, контекстное меню будет пустым или отсутствовать.
Проанализируем процесс реализации:
ПолеКартинки и новую Декорацию в одну группу формы (вид группы — Без отображения).ОтображениеУправления в значение Нет.Гиперссылка должно быть выключено, а текст должен быть пустым.В результате пользователь видит картинку (так как декорация прозрачна), но физически кликает по надписи. Это позволяет избежать эффекта «блеклости», который появляется при использовании свойства Доступность = Ложь.
Если нам нужен абсолютный контроль над поведением элемента, рассмотрим вариант вывода изображения через ПолеHTMLДокумента. Этот метод позволяет использовать возможности языка JavaScript для блокировки событий браузера внутри платформы 1С.
Посмотрим на пример программного формирования содержимого такого поля:
&НаСервере
Процедура ВывестиКартинкуНаФорму()
СсылкаНаКартину = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
ТекстHTML = "<html>
|<body style='margin:0; padding:0; overflow:hidden;'>
|<img src='" + СсылкаНаКартину + "'
| oncontextmenu='return false;'
| ondragstart='return false;'
| style='width:100%; height:auto;'>
|</body>
|</html>";
СодержимоеHTML = ТекстHTML;
КонецПроцедуры
В данном коде мы используем атрибут oncontextmenu='return false;', который полностью запрещает вызов правой кнопки мыши на уровне движка отображения HTML. Дополнительно атрибут ondragstart='return false;' блокирует возможность перетащить картинку мышкой на рабочий стол. Это максимально надежный способ программной защиты внутри приложения.
Разберем стандартные свойства платформы, которые упоминались в обсуждении. У элемента формы есть два важных флага: Доступность и ТолькоПросмотр.
Нужно учитывать следующие нюансы:
Доступность = Ложь, элемент перестает реагировать на любые действия пользователя, включая контекстное меню. Однако, как правильно заметили участники форума, картинка становится «блеклой» или серой, так как платформа визуально помечает недоступный элемент. Для фото сотрудников это часто неприемлемо.ТолькоПросмотр = Истина, визуальное качество сохраняется, но в некоторых версиях платформы контекстное меню «Сохранить как» все равно остается доступным, так как просмотр подразумевает возможность манипуляции с представлением данных.В ситуации, когда приложение запускается на информационном терминале, важно понимать: никакие программные запреты внутри 1С не дадут 100% гарантии, если ОС настроена небезопасно. Проанализируем системный подход.
Даже если мы уберем меню, остаются системные сочетания клавиш или возможность вызова диалогов через другие функции. Поэтому рекомендуем:
explorer.exe и ограничив доступ к локальным дискам C:, D: и прочим.Таким образом, комбинируя отключение автозаполнения меню в ПолеКартинки и использование ПоляHTMLДокумента для особо критичных узлов, мы создаем надежный и визуально приятный интерфейс, защищенный от несанкционированного доступа к файловой системе.