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