Перенос учетных записей и прав доступа между конфигурациями на базе Библиотеки стандартных подсистем (включая 1С:ЗУП КОРП, 1С:ERP, 1С:КА) часто вызывает сложности. На первый взгляд кажется, что достаточно скопировать список пользователей платформы или перенести элементы справочника, однако на практике пользователи либо не могут войти в программу, либо остаются без назначенных прав и настроек. Разберем архитектуру подсистемы управления доступом и пошагово выясним, как правильно выполнить перенос всех составляющих.
Чтобы понять логику переноса, проанализируем, из каких компонентов состоит профиль пользователя в современных конфигурациях 1С:
ПользовательИнформационнойБазы): содержит системное имя, хеш пароля, настройки аутентификации (ОС, OpenID, стандартная) и список базовых ролей.Справочник.Пользователи: прикладной объект, который связывается с учетной записью платформы через уникальный идентификатор (GUID) в реквизите ИдентификаторПользователяИБ. Если создать пользователя в конфигураторе или через платформенный менеджер, но не создать связанный элемент справочника с совпадающим GUID, при входе в систему возникнет ошибка: «Пользователь с таким именем отсутствует в справочнике. Конфигурация будет закрыта».Справочник.ПрофилиГруппДоступа, Справочник.ГруппыДоступа и Справочник.ГруппыПользователей.ХранилищеСистемныхНастроек, ХранилищеОбщихНастроек, ХранилищеПользовательскихНастроекОтчетов).Рассмотрим программный пример выгрузки пользователей платформы с сохранением их параметров аутентификации и назначенных ролей с использованием механизмов XDTO. Обратите внимание: при написании кода в контексте конфигураций БСП нельзя использовать имя переменной Пользователи, так как оно совпадает с именем глобального общего модуля. Используем другое наименование переменной, например СписокПользователей.
СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого Пользователь Из СписокПользователей Цикл
User = Фабрика.Создать(ТипПользователь);
User.OSAuthentication = Пользователь.АутентификацияОС;
User.StandardAuthentication = Пользователь.АутентификацияСтандартная;
User.OpenIDAuthentication = Пользователь.АутентификацияOpenID;
User.CannotChangePassword = Пользователь.ЗапрещеноИзменятьПароль;
User.Name = Пользователь.Имя;
Если Пользователь.ОсновнойИнтерфейс <> Неопределено Тогда
User.DefaultInterface = Пользователь.ОсновнойИнтерфейс.Имя;
КонецЕсли;
User.ShowInList = Пользователь.ПоказыватьВСпискеВыбора;
User.FullName = Пользователь.ПолноеИмя;
User.OSUser = Пользователь.ПользовательОС;
User.RunMode = РежимыЗапуска[Пользователь.РежимЗапуска];
User.StoredPasswordValue = Пользователь.СохраняемоеЗначениеПароля;
User.UUID = Пользователь.УникальныйИдентификатор;
Если Пользователь.Язык <> Неопределено Тогда
User.Language = Пользователь.Язык.Имя;
КонецЕсли;
Для Каждого Роль Из Пользователь.Роли Цикл
Role = Фабрика.Создать(ТипРоль);
Role.Name = Роль.Имя;
User.Roles.Добавить(Role);
КонецЦикла;
Фабрика.ЗаписатьXML(Запись, User);
КонецЦикла;
Данный фрагмент позволяет сохранить системные параметры учетных записей, включая хеши паролей (СохраняемоеЗначениеПароля), благодаря чему пользователям не придется менять пароли при первом входе.
Разберем по шагам, как выстроить полный процесс переноса между базами одной конфигурации:
Справочник.Пользователи;Справочник.ГруппыПользователей;Справочник.ПрофилиГруппДоступа;Справочник.ГруппыДоступа.Справочник.Пользователи механизмы БСП автоматически создадут или синхронизируют учетную запись платформы ПользовательИнформационнойБазы по значению реквизита ИдентификаторПользователяИБ.
УправлениеДоступом.ОбновитьПользователейИнформационнойБазы();
Также можно запустить регламентные задания по обновлению прав доступа вручную через панель администрирования.ХранилищеСистемныхНастроек, ХранилищеПользовательскихНастроекОтчетов) либо через типовую сервисную обработку БСП «Копирование настроек пользователей».Следуя этой схеме, мы получаем полностью идентичную копию пользовательских прав, ролей и интерфейсных настроек без необходимости ручного сопоставления каждого пользователя в конфигураторе.