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