Как программно перенести пользователей, роли, права доступа и настройки интерфейса между базами 1С

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

Перенос учетных записей и прав доступа между конфигурациями на базе Библиотеки стандартных подсистем (включая 1С:ЗУП КОРП, 1С:ERP, 1С:КА) часто вызывает сложности. На первый взгляд кажется, что достаточно скопировать список пользователей платформы или перенести элементы справочника, однако на практике пользователи либо не могут войти в программу, либо остаются без назначенных прав и настроек. Разберем архитектуру подсистемы управления доступом и пошагово выясним, как правильно выполнить перенос всех составляющих.

Архитектура хранения прав и пользователей в конфигурациях на БСП

Чтобы понять логику переноса, проанализируем, из каких компонентов состоит профиль пользователя в современных конфигурациях 1С:

  1. Учетная запись платформы (ПользовательИнформационнойБазы): содержит системное имя, хеш пароля, настройки аутентификации (ОС, OpenID, стандартная) и список базовых ролей.
  2. Элемент справочника Справочник.Пользователи: прикладной объект, который связывается с учетной записью платформы через уникальный идентификатор (GUID) в реквизите ИдентификаторПользователяИБ. Если создать пользователя в конфигураторе или через платформенный менеджер, но не создать связанный элемент справочника с совпадающим GUID, при входе в систему возникнет ошибка: «Пользователь с таким именем отсутствует в справочнике. Конфигурация будет закрыта».
  3. Подсистема «Управление доступом»: в БСП роли не назначаются пользователям напрямую вручную. Права формируются динамически на основе справочников Справочник.ПрофилиГруппДоступа, Справочник.ГруппыДоступа и Справочник.ГруппыПользователей.
  4. Ограничения на уровне записей (RLS): условия RLS привязаны к конкретным ссылкам (организациям, подразделениям, группам физлиц). При переносе прав критически важно, чтобы ссылки на объекты ограничений в обеих базах совпадали по уникальным идентификаторам.
  5. Пользовательские настройки интерфейса и форм: сохраняются платформой в системных хранилищах (ХранилищеСистемныхНастроек, ХранилищеОбщихНастроек, ХранилищеПользовательскихНастроекОтчетов).

Выгрузка пользователей информационной базы с помощью XDTO

Рассмотрим программный пример выгрузки пользователей платформы с сохранением их параметров аутентификации и назначенных ролей с использованием механизмов 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);
КонецЦикла;

Данный фрагмент позволяет сохранить системные параметры учетных записей, включая хеши паролей (СохраняемоеЗначениеПароля), благодаря чему пользователям не придется менять пароли при первом входе.

Пошаговый алгоритм комплексного переноса прав и настроек

Разберем по шагам, как выстроить полный процесс переноса между базами одной конфигурации:

  1. Синхронизация ссылочных данных: перед переносом прав убедимся, что объекты, по которым настраиваются ограничения (организации, подразделения, территории), имеют одинаковые GUID в базе-источнике и базе-приемнике.
  2. Перенос справочников доступа: выгружаем и загружаем данные следующих справочников с сохранением GUID:
    • Справочник.Пользователи;
    • Справочник.ГруппыПользователей;
    • Справочник.ПрофилиГруппДоступа;
    • Справочник.ГруппыДоступа.
    При записи элементов справочника Справочник.Пользователи механизмы БСП автоматически создадут или синхронизируют учетную запись платформы ПользовательИнформационнойБазы по значению реквизита ИдентификаторПользователяИБ.
  3. Обновление и перерасчет прав БСП: после прямой загрузки справочников служебные таблицы доступа остаются незаполненными. Для актуализации ролей и прав RLS необходимо запустить служебное обновление прав. Для этого вызовем процедуру общего модуля подсистемы доступа: УправлениеДоступом.ОбновитьПользователейИнформационнойБазы(); Также можно запустить регламентные задания по обновлению прав доступа вручную через панель администрирования.
  4. Перенос настроек интерфейса и отчетов: персональные настройки пользователей переносятся через программную выгрузку системных хранилищ (ХранилищеСистемныхНастроек, ХранилищеПользовательскихНастроекОтчетов) либо через типовую сервисную обработку БСП «Копирование настроек пользователей».

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

← На главную