Почему пропадают роли пользователей при обмене в РИБ и как это исправить?

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

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

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

Причина сброса ролей: архитектура БСП

Проанализируем, почему ручная корректировка ролей в конфигураторе или простое назначение ролей не работают в современных конфигурациях:

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

Способ 1. Создание отдельного профиля и группы доступа

Рассмотрим основной и самый правильный способ назначения нетиповых ролей в режиме 1С:Предприятие без доработки программного кода:

  1. Откроем раздел Администрирование → Настройки пользователей и прав → Группы доступа (или Профили групп доступа).
  2. Создадим новый элемент в справочнике Профили групп доступа, укажем понятное наименование и отметим флагами все необходимые доработанные роли.
  3. Создадим новую Группу доступа, выберем в ней созданный профиль и добавим нужных пользователей в состав участников группы.
  4. Если пользователю требуются и административные, и специфические доработанные права, не назначайте роли вручную в конфигураторе. Достаточно включить пользователя одновременно в типовую группу Администраторы и в созданную дополнительную группу доступа.

Способ 2. Программное включение ролей в поставляемый профиль администратора

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

Разберем по шагам, как это реализовать в конфигураторе:

  1. Найдем общий модуль УправлениеДоступомПереопределяемый.
  2. В процедуре ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписанияПрофилей) добавим свои роли в состав профиля администратора.

Посмотрим на пример кода:


Процедура ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписанияПрофилей) Экспорт
    
    // Получаем описание предопределенного профиля Администратор
    Описание = ОписанияПрофилей.Найти(
        Справочники.ПрофилиГруппДоступа.Администратор, "Идентификатор");
    
    Если Описание <> Неопределено Тогда
        // Добавляем нетиповую роль в состав ролей профиля
        Описание.Роли.Добавить("МояДополнительнаяРоль");
    КонецЕсли;
    
КонецПроцедуры

После внесения изменений в модуль необходимо запустить процедуру обновления поставляемых данных управления доступом (например, при обновлении информационной базы или вызвав метод УправлениеДоступом.ОбновитьДанныеУправленияДоступом()).

Способ 3. Актуализация справочника идентификаторов метаданных

Проверим корректность регистрации новых метаданных в подсистеме БСП. Если система не знает о существовании новых ролей, она не сможет сохранить их в профилях.

Выполним принудительное обновление идентификаторов объектов метаданных с помощью внешней обработки или через запуск сеанса:

  1. Запустим сеанс «1С:Предприятие» с ключом командной строки: /C ЗапуститьОбновлениеИнформационнойБазы
  2. Либо выполним программное обновление справочника идентификаторов в обработке с полными правами: Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();

Способ 4. Проверка состава плана обмена РИБ

Проанализируем структуру плана обмена. Если между узлами РИБ данные о группах доступа приходят не полностью или затираются устаревшими версиями, состав прав будет регулярно ломаться.

Убедимся, что в состав используемого плана обмена с признаком Авторегистрация включены следующие объекты:

  1. Справочники: Пользователи, ГруппыПользователей, ПрофилиГруппДоступа, ГруппыДоступа, ИдентификаторыОбъектовМетаданных.
  2. Регистры сведений: ТаблицыГруппДоступа, СоставыГруппПользователей, ПраваРолей.

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

← На главную