Как позволить обычным пользователям изменять пароли в режиме «1С:Предприятие»?

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

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

Основные принципы безопасности 1С

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

Реализация через общий привилегированный модуль

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

  1. Создайте Общий модуль (например, «УправлениеПользователямиСервер»).
  2. В свойствах модуля обязательно установите флаг «Привилегированный».
  3. В модуле создайте экспортную процедуру, которая будет принимать данные пользователя и выполнять запись.

Рассмотрим пример кода для такого модуля:


Процедура ФойдаланувчиниТахрирлаш(Фойд, Номи, Парол, Рол) Экспорт
    // Включаем привилегированный режим принудительно
    УстановитьПривилегированныйРежим(Истина);
    
    Если НЕ Фойд.Имя = "" Тогда
        // Изменение существующего пользователя
        Фойд.Имя = Номи;
        Фойд.ПолноеИмя = Номи;
        Фойд.Пароль = Парол;
        Фойд.Роли.Очистить();
        Фойд.Роли.Добавить(Метаданные.Роли.Найти(Рол));
        Фойд.АутентификацияСтандартная = Истина;
        Фойд.Записать();
    Иначе
        // Создание нового пользователя
        НовФойд = ПользователиИнформационнойБазы.СоздатьПользователя();
        НовФойд.Имя = Номи;
        НовФойд.Роли.Добавить(Метаданные.Роли.Найти(Рол));
        НовФойд.Пароль = Парол;
        НовФойд.ПоказыватьВСпискеВыбора = Ложь;
        НовФойд.АутентификацияСтандартная = Истина;
        НовФойд.Записать();
    КонецЕсли;
КонецПроцедуры

Вызов из управляемой формы

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


&НаСервере
Процедура ИзменитьПарольНаСервере()
    // Получаем текущего пользователя или выбираем другого
    Поль = ПользователиИнформационнойБазы.ТекущийПользователь();
    ПаролниУзгартириш.ФойдаланувчиниТахрирлаш(Поль, "ИмяПользователя", "НовыйПароль", "ИмяРоли");
КонецПроцедуры

Важные замечания и рекомендации

При проектировании данного функционала важно учитывать следующие моменты:

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

← На главную