Почему слетают самописные роли у пользователей в 1С:УТ 11 и как это исправить?

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

Многие разработчики при работе с современными конфигурациями (УТ 11, ERP 2, КА 2, ЗУП 3), построенными на базе Библиотеки стандартных подсистем (БСП), сталкиваются с неприятной ситуацией: назначенные пользователю роли в конфигураторе или программно внезапно «исчезают». Особенно часто это происходит при изменении состава групп доступа или обновлении информационной базы. Разберем детально, почему это происходит и как правильно организовать работу с правами доступа, чтобы настройки не «слетали».

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

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

Когда вы записываете пользователя в режиме «Предприятие», добавляете его в группу доступа или выполняете обновление системы, срабатывает процедура УправлениеДоступом.ОбновитьРолиПользователя(). Она действует по следующему алгоритму:

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

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

Решение 1: Использование профилей и групп доступа (стандартный путь)

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

Выполним следующие шаги:

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

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

Решение 2: Использование переопределяемого модуля (путь программиста)

Иногда требуется, чтобы определенные роли назначались программно или были «неприкосновенными» для механизмов очистки БСП. Для этого проанализируем возможности общего модуля УправлениеДоступомПереопределяемый.

Найдем в этом модуле процедуру ПриЗаполненииСпискаСоответствияРолей или ПриОпределенииНазначенияРолей. В зависимости от версии БСП, названия могут немного отличаться, но суть остается прежней: здесь мы можем программно вмешаться в процесс формирования набора прав.

Посмотрим на пример использования процедуры ПриОпределенииНазначенияРолей:


Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт
	
    // Указываем системе, что наша самописная роль является служебной
    // и не должна удаляться при стандартных проверках.
    НазначениеРолей.Добавить("МояСамописнаяРоль", "Служебная");
    
КонецПроцедуры

Также стоит обратить внимание на процедуру ПриЗаполненииПоставляемыхПрофилейГруппДоступа. Если вы хотите, чтобы ваша роль автоматически попадала в типовой профиль (например, в профиль «Администратор») при обновлении конфигурации, это нужно прописать именно здесь.

Особенности роли «Полные права» и оптимизация

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

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

Проблема ролей в расширениях

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

  1. Расширение подключено и активно.
  2. В справочнике ИдентификаторыОбъектовМетаданных созданы записи для объектов расширения (в современных версиях это происходит автоматически, в старых требовало ручного запуска обновления).
  3. Вы не пытаетесь назначить роль из расширения пользователю «вручную» через конфигуратор основной базы.

Подведем итоги

Чтобы роли в 1С:УТ 11 не «слетали», запомним главное правило: никогда не назначайте роли в конфигураторе. Права в БСП — это динамическая сущность, которая формируется на лету на основании настроек в режиме «Предприятие».

Алгоритм действий для закрепления ролей:

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

← На главную