Как вернуть права на собственные объекты в расширении после обновления платформы и конфигурации 1С?

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

При обновлении типовых конфигураций «1С:Предприятие» (например, 1С:ЗУП, 1С:УТ или 1С:ERP) разработчики часто сталкиваются с неприятной ситуацией: пользователи без полных прав внезапно теряют доступ к объектам, добавленным через расширение. При этом до обновления все работало корректно, а права на собственные объекты расширения выдавались автоматически без дополнительных настроек. В этой статье мы подробно разберем, почему так происходит, как изменилась логика работы платформы в разных режимах совместимости и как правильно настроить права доступа, чтобы восстановить работоспособность системы.

Выясняем причину: влияние режима совместимости на роли расширения

Для начала проанализируем ситуацию и поймем корень проблемы. Поведение платформы по отношению к правам на собственные (добавленные) объекты расширения кардинально отличается в зависимости от установленного в конфигурации режима совместимости:

  1. Режим совместимости 8.3.13 и ниже: Если в вашем расширении вообще нет собственных ролей, платформа применяет упрощенный алгоритм. Она автоматически предоставляет доступ ко всем добавленным в расширение объектам абсолютно всем пользователям информационной базы. Именно поэтому до обновления конфигурации у пользователей без административных прав всё работало без ошибок. Однако здесь существовало строгое ограничение: как только в расширение добавлялась хотя бы одна роль (пустая или заимствованная), автодоступ «для всех» мгновенно отключался, и права приходилось настраивать вручную.
  2. Режим совместимости 8.3.14 и выше: При обновлении конфигурации (например, при переходе на новые релизы 1С:ЗУП 3.1.12 и выше) разработчики повышают режим совместимости основной конфигурации. С этого момента старая логика «нет ролей — доступно всем» упраздняется в целях повышения безопасности системы. Теперь права на любые новые объекты в расширении должны быть явно описаны в ролях этого же расширения.

Метод решения 1. Использование механизма основных ролей расширения

Начиная с версии платформы 8.3.14, в расширениях появился удобный механизм работы с основными ролями. Выполним по шагам настройку, которая позволит быстро вернуть доступ пользователям:

  1. Откроем конфигуратор и перейдем в окно управления расширениями.
  2. Добавим в наше расширение новую собственную роль (например, назовем ее ОсновнаяРольРасширения).
  3. В свойствах созданной роли отметим галочками необходимые права (Чтение, Просмотр, Изменение, Ввод новых) для всех добавленных в это расширение собственных объектов.
  4. Установим эту роль в качестве основной для данного расширения. Для этого в свойствах самого расширения найдем список основных ролей и добавим туда нашу роль (она будет помечена специальной пиктограммой).
  5. Обновим конфигурацию базы данных.
  6. Перейдем в режим «1С:Предприятие». Под пользователем с полными правами откроем меню «Функции для технического специалиста» (или «Все функции»), найдем стандартную обработку «Управление расширениями» и перейдем в раздел «Управление основными ролями».
  7. В открывшемся окне установим флажки для тех пользователей, которым необходим доступ к возможностям этого расширения.

Также обратим внимание на важное свойство в карточке расширения: «Использовать основные роли для всех пользователей». Если включить эту опцию, права, заданные в основных ролях расширения, будут автоматически применяться ко всем без исключения пользователям информационной базы, избавляя от необходимости назначать их вручную в режиме «1С:Предприятие».

Метод решения 2. Настройка прав через профили групп доступа БСП

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

  1. В конфигураторе внутри расширения создадим роль с понятным именем, например, ДобавленныеОбъектыЧтениеИЗапись.
  2. Настроим в этой роли права доступа только для собственных объектов расширения.
  3. Для того чтобы администраторы системы также имели доступ к новым объектам, заимствуем в расширение типовую роль ПолныеПрава и предоставим ей полные права на добавленные объекты расширения. Без этого шага даже пользователи с суперправами могут столкнуться с ошибкой «Нарушение прав доступа».
  4. Запустим сеанс «1С:Предприятие» и перейдем в раздел «Администрирование» — «Настройки пользователей и прав» — «Профили групп доступа».
  5. Создадим новый профиль групп доступа (или отредактируем существующий профиль, под которым работают целевые пользователи).
  6. В списке разрешенных ролей найдем нашу роль из расширения ДобавленныеОбъектыЧтениеИЗапись и отметим ее флажком.
  7. Сохраним изменения. Теперь все пользователи, входящие в соответствующую группу доступа, автоматически получат права на работу с объектами расширения.

Обход ошибки переопределения свойств заимствованных объектов

Иногда при попытке обновить или изменить метаданные в расширении возникает ошибка:

"Переопределение свойств заимствованных объектов в расширениях недопустимо в режиме совместимости 8.3.13 и ниже"

Проанализируем эту ситуацию. Ошибка означает, что ваша основная конфигурация все еще работает в старом режиме совместимости, и платформа запрещает изменять контролируемые свойства (такие как тип данных, длина, точность реквизитов) у заимствованных объектов конфигурации. В этом случае у нас есть два пути решения:


ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("Иванов");
Если ПользовательИБ <> Неопределено Тогда
    НоваяРоль = Метаданные.Роли.Найти("МоеРасширение_ОсновнаяРоль");
    Если НоваяРоль <> Неопределено И Не ПользовательИБ.Роли.Содержит(НоваяРоль) Тогда
        ПользовательИБ.Роли.Добавить(НоваяРоль);
        ПользовательИБ.Записать();
    КонецЕсли;
КонецЕсли;

Скрытая проблема: сбои в работе фоновых и регламентных заданий

После переноса прав в роли расширения вы можете столкнуться с тем, что регламентные или фоновые задания (например, отложенное проведение документов, интеграция или синхронизация данных) начинают завершаться с ошибками прав доступа.

Выясним причину: фоновые задания по умолчанию выполняются в контексте системного пользователя (часто без имени или под служебной учетной записью), у которого нет физической возможности интерактивно назначить роль расширения. Чтобы решить эту проблему, обязательно найдите в коде или в настройках регламентного задания поле «Имя пользователя» и явно укажите там учетную запись, обладающую всеми необходимыми правами доступа (включая роли созданного расширения).

← На главную