При разработке в среде 1С:Предприятие 8.3 на базе Библиотеки стандартных подсистем (БСП), к которой относится и 1С:Документооборот, программисты часто сталкиваются с ситуацией: новая роль создана в Конфигураторе, добавлена в профиль (полномочие) пользователя в режиме «Предприятие», но при этом права не применяются, а программные проверки возвращают Ложь. Разберем детально, как устроены механизмы синхронизации прав и что нужно сделать, чтобы система «увидела» изменения.
Для начала проанализируем ситуацию. В современных конфигурациях список ролей пользователя в Конфигураторе (в списке пользователей информационной базы) управляется программно. Это означает, что бессмысленно просто ставить галочку в Конфигураторе вручную — при следующей записи пользователя в режиме «Предприятие» подсистема управления доступом перезапишет список ролей в соответствии с назначенными ему Профилями групп доступа (в «1С:Документообороте» они называются Полномочиями).
Если роль не появляется в Конфигураторе после ее добавления в Полномочие, значит, цепочка передачи данных «Метаданные -> Справочник Идентификаторы -> Регистры прав -> Пользователь ИБ» прервана. Выясним причину этого разрыва по шагам.
Любой новый объект в дереве конфигурации, включая роли, должен быть зарегистрирован в справочнике ИдентификаторыОбъектовМетаданных. Без этой регистрации подсистема управления доступом просто не знает о существовании вашей роли.
Рассмотрим, как принудительно обновить эти данные. Часто разработчики используют программный вызов:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();
Однако этого может быть недостаточно, если изменения затронули иерархию или если система требует полного пересмотра метаданных. В таких случаях рекомендуется запустить сеанс «Предприятия» со специальным параметром командной строки:
/С ЗапуститьОбновлениеИнформационнойБазы
Этот параметр инициирует выполнение всех процедур обновления, предусмотренных в конфигурации, включая регистрацию новых объектов.
Это самый важный этап, который часто упускают. Метод УправлениеДоступом.ЕстьРоль(), в отличие от стандартной функции платформы РольДоступна(), работает не напрямую с сеансом пользователя, а обращается к специальному кэшу в базе данных — регистру сведений ПраваРолей.
Проанализируем ситуацию: если вы добавили роль в конфигурацию, но не обновили вспомогательные данные, регистр ПраваРолей останется пустым для этой роли. Чтобы исправить это, необходимо воспользоваться специализированной обработкой из состава БСП.
Разберем алгоритм действий:
После выполнения этой обработки метод УправлениеДоступом.ЕстьРоль() начнет возвращать корректное значение, так как данные в регистре будут синхронизированы с метаданными конфигурации.
В конфигурации 1С:Документооборот используется механизм отложенного обновления прав. Это сделано для того, чтобы при изменении полномочий у тысяч документов система не «зависала», а обрабатывала изменения постепенно в фоновом режиме.
Посмотрим на работу регламентных заданий. За синхронизацию прав отвечают следующие задания:
Если роль не появляется в Конфигураторе, убедитесь, что эти задания завершены без ошибок. Если задания «висят» или завершаются с ошибкой, изменения в Полномочиях не дойдут до карточки пользователя в информационной базе.
Для диагностики проблемы полезно сравнить результаты двух методов проверки. Проанализируем разницу:
РольДоступна("ИмяРоли") — встроенная функция платформы. Она проверяет реальный набор ролей текущего сеанса. Если здесь Ложь, значит, роль физически не назначена пользователю в Конфигураторе.УправлениеДоступом.ЕстьРоль("ИмяРоли") — метод БСП. Если здесь Ложь, а в первом пункте Истина, значит, проблема в обновлении регистров вспомогательных данных (см. Шаг 2).Рассмотрим пример правильной проверки в коде:
// Платформенная проверка (быстрая, по текущему сеансу)
Если РольДоступна("ДобавлениеИзменениеДокументов") Тогда
// Действие разрешено
КонецЕсли;
// Проверка через БСП (учитывает иерархию и кэш прав)
Если УправлениеДоступом.ЕстьРоль("ДобавлениеИзменениеДокументов") Тогда
// Действие разрешено
КонецЕсли;
Если вы столкнулись с тем, что новая роль не отображается в Конфигураторе или не подхватывается программно, выполните следующие действия:
ИдентификаторыОбъектовМетаданных. При необходимости запустите обновление метаданных.ОбновлениеВспомогательныхДанных, чтобы заполнить регистр ПраваРолей.Соблюдение этого порядка действий гарантирует правильную работу системы прав доступа и исключает расхождения между настройками в режиме «Предприятие» и реальными правами в Конфигураторе.