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