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