Как управлять пользователями в 1С на управляемых формах без БСП

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

В процессе разработки конфигураций «с нуля» (так называемых «нетленок») разработчики часто сталкиваются с ситуацией, когда стандартные механизмы Библиотеки стандартных подсистем (БСП) отсутствуют, а доступ к Конфигуратору в данный момент невозможен. В обычном приложении существовала возможность запуска со специфическими параметрами или использование встроенных команд, однако в Управляемом приложении (особенно при работе через тонкий или веб-клиент) привычного инструмента управления пользователями manageusers «из коробки» не предусмотрено.

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

Анализ проблемы: почему в УФ нет стандартного окна пользователей

Проанализируем ситуацию: в платформе 1С:Предприятие 8 разделены понятия «Пользователь информационной базы» (объект программного уровня платформы) и «Пользователь» как элемент справочника (прикладной объект). В типовых конфигурациях на базе БСП за создание интерфейса отвечает именно программный код библиотеки, который связывает эти две сущности. Если ваша конфигурация не содержит БСП, вам придется взаимодействовать напрямую с программным интерфейсом платформы ПользователиИнформационнойБазы.

Рассмотрим основные способы решения задачи, если вам нужно создать пользователя здесь и сейчас, находясь в режиме «Предприятие».

Способ 1. Использование толстого клиента

Если архитектура системы позволяет, самый быстрый способ получить доступ к управлению — запустить систему в режиме Толстого клиента. В этом режиме доступны некоторые стандартные функции администрирования, которые скрыты в тонком клиенте. Однако, как показывает практика и обсуждения специалистов, этот способ часто недоступен при работе через веб-сервер или при жестких настройках прав доступа.

Способ 2. Программное создание интерфейса управления

Для реализации собственного менеджера пользователей мы будем использовать менеджер ПользователиИнформационнойБазы. Важно помнить: все операции с пользователями должны выполняться на сервере от имени пользователя с административными правами.

Разберем по шагам создание нового пользователя. Создадим серверную процедуру, которая будет принимать необходимые параметры:


&НаСервере
Процедура СоздатьНовогоПользователяИБ(ИмяПользователя, ПарольПользователя)
    
    // Проверим, существует ли уже такой пользователь
    СуществующийПользователь = ПользователиИнформационнойБазы.НайтиПользователяИнформационнойБазы(ИмяПользователя);
    
    Если СуществующийПользователь = Неопределено Тогда
        // Создаем новый объект пользователя информационной базы
        НовыйПользователь = ПользователиИнформационнойБазы.СоздатьПользователя();
    Иначе
        НовыйПользователь = СуществующийПользователь;
    КонецЕсли;
    
    // Заполняем основные свойства
    НовыйПользователь.Имя = ИмяПользователя;
    НовыйПользователь.ПолноеИмя = ИмяПользователя;
    НовыйПользователь.Пароль = ПарольПользователя;
    
    // Настраиваем аутентификацию
    НовыйПользователь.АутентификацияСтандартная = Истина;
    НовыйПользователь.ПоказыватьВСпискеВыбора = Истина;
    
    // Добавляем роли (важно: роль должна существовать в конфигурации)
    // Например, добавим роль "ПолныеПрава"
    Попытка
        РольАдмин = Метаданные.Роли.ПолныеПрава;
        НовыйПользователь.Роли.Добавить(РольАдмин);
    Исключение
        Сообщить("Роль не найдена в метаданных!");
    КонецПопытки;
    
    // Записываем изменения в ИБ
    НовыйПользователь.Записать();
    
КонецПроцедуры

Способ 3. Получение списка всех пользователей

Иногда требуется просто увидеть, кто заведен в системе. Для этого используем метод ПолучитьПользователей(). Выясним причину, по которой это может быть полезно: часто в «нетленках» забывают про служебных пользователей или пользователей с аутентификацией по ОС.

Посмотрим на пример вывода списка в таблицу значений на форме:


&НаСервере
Процедура ПолучитьСписокПользователейНаСервере()
    
    // Очистим таблицу на форме (предположим, у нас есть реквизит ТаблицаПользователей)
    Объект.ТаблицаПользователей.Очистить();
    
    МассивПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
    
    Для Каждого ПользовательИБ Из МассивПользователей Цикл
        НоваяСтрока = Объект.ТаблицаПользователей.Добавить();
        НоваяСтрока.Имя = ПользовательИБ.Имя;
        НоваяСтрока.ПолноеИмя = ПользовательИБ.ПолноеИмя;
        НоваяСтрока.АутентификацияОС = ПользовательИБ.АутентификацияОС;
    КонецЦикла;
    
КонецПроцедуры

Работа с ролями и правами доступа

Проанализируем ситуацию с правами. При программном создании пользователя крайне важно назначить ему хотя бы одну роль, иначе он не сможет войти в систему (если в конфигурации установлены ограничения). Объект ПользовательИнформационнойБазы имеет свойство Роли, которое является коллекцией. Мы можем не только добавлять роли, но и проверять их наличие.

Рассмотрим подробнее процесс управления ролями:

  1. Используйте объект Метаданные.Роли для получения доступа к списку всех ролей конфигурации.
  2. Метод НовыйПользователь.Роли.Содержит(НужнаяРоль) позволит избежать дублирования.
  3. Если конфигурация очень простая, достаточно назначить роль, у которой стоит флаг «Администрирование».

Важные замечания по безопасности

При реализации собственных инструментов управления пользователями в 1С v8.3 следует учитывать следующие моменты:

Заключение

Хотя стандартного интерактивного инструмента manageusers для управляемых форм в чистой платформе не существует, объектная модель 1С предоставляет исчерпывающий набор инструментов для решения этой задачи. Разработка небольшой внешней обработки, содержащей вышеприведенный код, позволит вам оперативно управлять доступом к базе данных без необходимости заходить в Конфигуратор.

← На главную