При обновлении типовых конфигураций «1С:Предприятие» (например, 1С:ЗУП, 1С:УТ или 1С:ERP) разработчики часто сталкиваются с неприятной ситуацией: пользователи без полных прав внезапно теряют доступ к объектам, добавленным через расширение. При этом до обновления все работало корректно, а права на собственные объекты расширения выдавались автоматически без дополнительных настроек. В этой статье мы подробно разберем, почему так происходит, как изменилась логика работы платформы в разных режимах совместимости и как правильно настроить права доступа, чтобы восстановить работоспособность системы.
Для начала проанализируем ситуацию и поймем корень проблемы. Поведение платформы по отношению к правам на собственные (добавленные) объекты расширения кардинально отличается в зависимости от установленного в конфигурации режима совместимости:
Начиная с версии платформы 8.3.14, в расширениях появился удобный механизм работы с основными ролями. Выполним по шагам настройку, которая позволит быстро вернуть доступ пользователям:
ОсновнаяРольРасширения).Также обратим внимание на важное свойство в карточке расширения: «Использовать основные роли для всех пользователей». Если включить эту опцию, права, заданные в основных ролях расширения, будут автоматически применяться ко всем без исключения пользователям информационной базы, избавляя от необходимости назначать их вручную в режиме «1С:Предприятие».
Если ваша конфигурация построена на базе БСП (Библиотеки стандартных подсистем), более правильным и архитектурно верным решением будет интеграция ролей расширения в общую систему разграничения прав доступа. Рассмотрим этот процесс подробнее:
ДобавленныеОбъектыЧтениеИЗапись.ПолныеПрава и предоставим ей полные права на добавленные объекты расширения. Без этого шага даже пользователи с суперправами могут столкнуться с ошибкой «Нарушение прав доступа».ДобавленныеОбъектыЧтениеИЗапись и отметим ее флажком.Иногда при попытке обновить или изменить метаданные в расширении возникает ошибка:
"Переопределение свойств заимствованных объектов в расширениях недопустимо в режиме совместимости 8.3.13 и ниже"
Проанализируем эту ситуацию. Ошибка означает, что ваша основная конфигурация все еще работает в старом режиме совместимости, и платформа запрещает изменять контролируемые свойства (такие как тип данных, длина, точность реквизитов) у заимствованных объектов конфигурации. В этом случае у нас есть два пути решения:
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("Иванов");
Если ПользовательИБ <> Неопределено Тогда
НоваяРоль = Метаданные.Роли.Найти("МоеРасширение_ОсновнаяРоль");
Если НоваяРоль <> Неопределено И Не ПользовательИБ.Роли.Содержит(НоваяРоль) Тогда
ПользовательИБ.Роли.Добавить(НоваяРоль);
ПользовательИБ.Записать();
КонецЕсли;
КонецЕсли;
После переноса прав в роли расширения вы можете столкнуться с тем, что регламентные или фоновые задания (например, отложенное проведение документов, интеграция или синхронизация данных) начинают завершаться с ошибками прав доступа.
Выясним причину: фоновые задания по умолчанию выполняются в контексте системного пользователя (часто без имени или под служебной учетной записью), у которого нет физической возможности интерактивно назначить роль расширения. Чтобы решить эту проблему, обязательно найдите в коде или в настройках регламентного задания поле «Имя пользователя» и явно укажите там учетную запись, обладающую всеми необходимыми правами доступа (включая роли созданного расширения).