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