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