Почему в 1С:УНФ 3.0 слетает роль из расширения и как это исправить?

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

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

Выясним причину: почему система отключает роли?

На первый взгляд кажется, что это ошибка, но на самом деле такое поведение — это штатный механизм Библиотеки стандартных подсистем (БСП), на которой построена 1С:УНФ. Суть механизма заключается в следующем:

Система считает, что у пользователей с ролью ПолныеПрава уже есть все возможные разрешения. Поэтому наличие у них любых других ролей считается избыточным. Чтобы поддерживать порядок, специальное регламентное задание периодически запускает процедуру, которая "очищает" лишние роли у таких пользователей.

Чаще всего за это отвечает метод УправлениеДоступомСлужебный.ОбновитьРолиПользователейИБ. Именно он обнаруживает, что у пользователя с полными правами есть "нестандартная" роль из вашего расширения, и отключает ее. Поэтому ручное включение роли в конфигураторе дает лишь временный эффект до следующего запуска этого задания.

Теперь, когда мы понимаем причину, рассмотрим, как правильно настроить систему.

Решение 1: Программное добавление роли для пользователей с полными правами

Чтобы система перестала отключать нашу роль, мы должны явно указать ей, что эта роль является исключением и ее можно назначать администраторам. Сделать это можно только программно, с помощью расширения конфигурации. Разберем по шагам, как это реализовать.

  1. Создаем расширение. Если у вас его еще нет, создайте новое расширение для доработки функционала.

  2. Находим нужный модуль и процедуру. Нас интересует общий модуль УправлениеПользователямиПереопределяемый и его процедура ПриОпределенииДополнительныхРолейАдминистратора. Если такой процедуры нет в вашей версии БСП, аналогом может быть функция ТекущиеСвойстваПользователей в модуле УправлениеДоступомПереопределяемый. Мы будем использовать аннотацию &ИзменениеИКонтроль.

  3. Добавляем код. В модуле вашего расширения создаем процедуру с тем же именем и добавляем в нее свой код. Наша задача — добавить имена наших ролей из расширения в специальный массив ДополнительныеРолиАдминистратора.

Посмотрим на пример. Допустим, в вашем расширении есть три роли: МояРоль1, МояРоль2 и МояРоль3.

Пример кода для добавления ролей в исключения:


&ИзменениеИКонтроль("ТекущиеСвойстваПользователей")
Функция МоеРасширение_ТекущиеСвойстваПользователей(МассивПользователей, СтандартнаяОбработка)

    // Этот код добавляет наши роли в список разрешенных для администраторов.
    // Теперь система не будет их отключать.
    ДополнительныеРолиАдминистратора.Вставить("МояРоль1", Истина);
    ДополнительныеРолиАдминистратора.Вставить("МояРоль2", Истина);
    ДополнительныеРолиАдминистратора.Вставить("МояРоль3", Истина);
    
    // Важно! Вызываем стандартный обработчик после наших изменений,
    // чтобы не нарушить логику системы.
    СтандартнаяОбработка = Истина;
    
    // Возвращаем пустую структуру, так как мы только изменили
    // переданный по ссылке параметр ДополнительныеРолиАдминистратора.
    Возврат Новый Структура;

КонецФункции

После применения такого расширения, при следующем обновлении прав, система "увидит" ваши роли в списке разрешенных и больше не будет их трогать. Это самый надежный способ для пользователей с полными правами.

Решение 2: Настройка прав для обычных пользователей и объектов расширения

Если проблема возникает не у администраторов, а у обычных пользователей, или если администраторы не видят новые объекты (отчеты, обработки) из расширения, то нужно выполнить дополнительные настройки.

Важный момент: как только вы добавляете в расширение хотя бы одну роль, доступ ко всем объектам этого расширения начинает управляться исключительно через роли. Система больше не предоставляет доступ к ним "по умолчанию".

Рассмотрим подробнее два сценария:

  1. Доступ для обычных пользователей.

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

  2. Доступ для пользователей с полными правами.

    Как мы выяснили, просто добавить им роль не получится. Чтобы администраторы увидели новые объекты из расширения, необходимо сделать следующее:

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

    Таким образом, вы "расширяете" стандартную роль ПолныеПрава, добавляя в нее разрешения на ваши новые объекты.

Дополнительные советы и рекомендации

Иногда возникают сопутствующие проблемы. Вот несколько советов, которые могут помочь:

Надеемся, этот подробный разбор поможет вам окончательно решить проблему с назначением ролей из расширений и сделает вашу работу с 1С:УНФ более предсказуемой и стабильной.

← К списку