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