Почему новая роль не отображается у пользователя в Конфигураторе и не работает метод УправлениеДоступом.ЕстьРоль?

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

При разработке в среде 1С:Предприятие 8.3 на базе Библиотеки стандартных подсистем (БСП), к которой относится и 1С:Документооборот, программисты часто сталкиваются с ситуацией: новая роль создана в Конфигураторе, добавлена в профиль (полномочие) пользователя в режиме «Предприятие», но при этом права не применяются, а программные проверки возвращают Ложь. Разберем детально, как устроены механизмы синхронизации прав и что нужно сделать, чтобы система «увидела» изменения.

Анализируем механизмы управления доступом БСП

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

Если роль не появляется в Конфигураторе после ее добавления в Полномочие, значит, цепочка передачи данных «Метаданные -> Справочник Идентификаторы -> Регистры прав -> Пользователь ИБ» прервана. Выясним причину этого разрыва по шагам.

Шаг 1. Обновление идентификаторов объектов метаданных

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

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

Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();

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

/С ЗапуститьОбновлениеИнформационнойБазы

Этот параметр инициирует выполнение всех процедур обновления, предусмотренных в конфигурации, включая регистрацию новых объектов.

Шаг 2. Обновление вспомогательных данных БСП

Это самый важный этап, который часто упускают. Метод УправлениеДоступом.ЕстьРоль(), в отличие от стандартной функции платформы РольДоступна(), работает не напрямую с сеансом пользователя, а обращается к специальному кэшу в базе данных — регистру сведений ПраваРолей.

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

Разберем алгоритм действий:

  1. Найдите в составе БСП (или в составе инструментов разработчика вашей конфигурации) обработку «Обновление вспомогательных данных».
  2. Запустите её в режиме «Предприятие».
  3. Данная обработка пересчитает и заполнит регистры, отвечающие за права, включая иерархию групп доступа и состав ролей.

После выполнения этой обработки метод УправлениеДоступом.ЕстьРоль() начнет возвращать корректное значение, так как данные в регистре будут синхронизированы с метаданными конфигурации.

Шаг 3. Специфика «1С:Документооборота» и отложенное обновление

В конфигурации 1С:Документооборот используется механизм отложенного обновления прав. Это сделано для того, чтобы при изменении полномочий у тысяч документов система не «зависала», а обрабатывала изменения постепенно в фоновом режиме.

Посмотрим на работу регламентных заданий. За синхронизацию прав отвечают следующие задания:

Если роль не появляется в Конфигураторе, убедитесь, что эти задания завершены без ошибок. Если задания «висят» или завершаются с ошибкой, изменения в Полномочиях не дойдут до карточки пользователя в информационной базе.

Шаг 4. Проверка через РольДоступна и УправлениеДоступом.ЕстьРоль

Для диагностики проблемы полезно сравнить результаты двух методов проверки. Проанализируем разницу:

  1. РольДоступна("ИмяРоли") — встроенная функция платформы. Она проверяет реальный набор ролей текущего сеанса. Если здесь Ложь, значит, роль физически не назначена пользователю в Конфигураторе.
  2. УправлениеДоступом.ЕстьРоль("ИмяРоли") — метод БСП. Если здесь Ложь, а в первом пункте Истина, значит, проблема в обновлении регистров вспомогательных данных (см. Шаг 2).

Рассмотрим пример правильной проверки в коде:


// Платформенная проверка (быстрая, по текущему сеансу)
Если РольДоступна("ДобавлениеИзменениеДокументов") Тогда
    // Действие разрешено
КонецЕсли;

// Проверка через БСП (учитывает иерархию и кэш прав)
Если УправлениеДоступом.ЕстьРоль("ДобавлениеИзменениеДокументов") Тогда
    // Действие разрешено
КонецЕсли;

Резюме: пошаговый чек-лист решения проблемы

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

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

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

← На главную