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