Пользователи / Модуль объекта
файл///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Если НЕ МобильныйАвтономныйСервер Тогда
#Область ОписаниеПеременных
// Значения объекта до записи для использования в обработчике события ПриЗаписи.
Перем ЭтоНовый;
Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ.
#КонецОбласти
// Область ПрограммныйИнтерфейс.
//
// Программный интерфейс объекта реализован через ДополнительныеСвойства.
//
// ОписаниеПользователяИБ - Структура со свойствами:
// Действие - Строка - "Записать" или "Удалить".
// 1. Если Действие = "Удалить" другие свойства не требуются. Удаление
// будет считаться успешным и в том случае, когда пользовательИБ
// не найден по значению реквизита ИдентификаторПользователяИБ.
// 2. Если Действие = "Записать", тогда будет создан или обновлен
// пользователь ИБ по указанным свойствам. Чтобы пользователь не создавался,
// когда не найден, нужно вставить в структуру свойство "ТолькоОбновитьПользователяИБ".
//
// ВходВПрограммуРазрешен - Неопределено - вычислить автоматически:
// если вход в приложение запрещен, тогда остается запрещен,
// иначе остается разрешен, кроме случая, когда
// все виды аутентификации установлены в Ложь.
// - Булево - если Истина, тогда установить аутентификацию, как
// указана или сохранена в значениях одноименных реквизитов;
// если Ложь, тогда снять все виды аутентификации у пользователя ИБ.
// Если свойство не указано - прямая установка сохраняемых и
// действующих видов аутентификации (для поддержки обратной совместимости).
//
// ПотребоватьСменуПароляПриВходе - Булево - изменяет одноименный флажок карточки пользователя.
// - Неопределено - флажок не изменяется (аналогично,
// если свойство не указано).
//
// АутентификацияСтандартная, АутентификацияOpenID, АутентификацияOpenIDConnect,
// АутентификацияТокеномДоступа, АутентификацияОС - установить сохраняемые значения
// видов аутентификации и действующие значения видов аутентификации
// в зависимости от использования свойства ВходВПрограммуРазрешен.
//
// Остальные свойства.
// Состав остальных свойств указывается аналогично составу свойств параметра.
// ОбновляемыеСвойства для процедуры Пользователи.УстановитьСвойстваПользователяИБ(),
// кроме свойства ПолноеИмя - устанавливается по Наименованию.
//
// Для сопоставления существующего свободного пользователя ИБ с пользователем в справочнике,
// с которым не сопоставлен другой существующий пользователь ИБ, нужно вставить свойство.
// УникальныйИдентификатор. Если указать идентификатор пользователя ИБ, который
// сопоставлен с текущим пользователем, ничего не изменится.
//
// При выполнении действий "Записать" и "Удалить" реквизит ИдентификаторПользователяИБ
// объекта обновляется автоматически, его не следует изменять.
//
// После выполнения действия в структуру вставляются (обновляются) следующие свойства:
// - РезультатДействия - Строка, содержащая одно из значений:
// - когда действие "Записать": "ДобавленПользовательИБ", "ИзмененПользовательИБ", "УдаленПользовательИБ" и
// если вставлено свойство "ТолькоОбновитьПользователяИБ" может быть "ПропущеноДобавлениеПользователяИБ".
// - когда действие "Удалить": "ОчищеноСопоставлениеСНесуществующимПользователемИБ",
// "НеТребуетсяУдалениеПользовательИБ"
// - УникальныйИдентификатор - УникальныйИдентификатор пользователя ИБ.
//
// ОписаниеПользователяИБ обрабатывается в режиме ОбменДанными.Загрузка = Истина.
//
// СозданиеАдминистратора - Строка - свойство должно быть вставлено с непустой строкой,
// чтобы вызвать событие ПриСозданииАдминистратора после обработки структуры ОписаниеПользователяИБ
// когда у созданного или измененного пользователя ИБ имеются роли администратора.
// Это нужно, чтобы сделать связанные действия при создании администратора, например,
// автоматически добавить пользователя в группу доступа Администраторы.
//
// КонецОбласти
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ)
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после блокировки регистров.
Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
ПользователиСлужебный.ЗаблокироватьРегистрыПередЗаписьюВФайловойИБ(Ложь);
КонецЕсли;
// АПК:75-вкл
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после обработки пользователя ИБ, когда требуется.
ПользователиСлужебный.ПользовательОбъектПередЗаписью(ЭтотОбъект, ПараметрыОбработкиПользователяИБ);
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ЭтоНовый = ЭтоНовый();
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после обработки пользователя ИБ, когда требуется.
Если ОбменДанными.Загрузка И ПараметрыОбработкиПользователяИБ <> Неопределено Тогда
ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ(
ЭтотОбъект, ПараметрыОбработкиПользователяИБ);
КонецЕсли;
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если ДополнительныеСвойства.Свойство("ГруппаНовогоПользователя")
И ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоПользователя) Тогда
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыПользователей");
ЭлементБлокировки.УстановитьЗначение("Ссылка", ДополнительныеСвойства.ГруппаНовогоПользователя);
Блокировка.Заблокировать();
ОбъектГруппы = ДополнительныеСвойства.ГруппаНовогоПользователя.ПолучитьОбъект(); // СправочникОбъект.ГруппыПользователей
ОбъектГруппы.Состав.Добавить().Пользователь = Ссылка;
ОбъектГруппы.Записать();
КонецЕсли;
// Обновление состава автоматической группы "Все пользователи".
ИзмененияСоставов = ПользователиСлужебный.НовыеИзмененияСоставовГрупп();
ПользователиСлужебный.ОбновитьИспользуемостьСоставовГруппПользователей(Ссылка, ИзмененияСоставов);
ПользователиСлужебный.ОбновитьСоставГруппыВсеПользователи(Ссылка, ИзмененияСоставов);
ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ(ЭтотОбъект,
ПараметрыОбработкиПользователяИБ);
ПользователиСлужебный.ПослеОбновленияСоставовГруппПользователей(ИзмененияСоставов);
ИнтеграцияПодсистемБСП.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый);
КонецПроцедуры
Процедура ПередУдалением(Отказ)
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после обработки пользователя ИБ, когда требуется.
ПользователиСлужебный.ПользовательОбъектПередУдалением(ЭтотОбъект);
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПользователиСлужебный.ОбновитьСоставыГруппПередУдалениемПользователяИлиГруппы(Ссылка);
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
ДополнительныеСвойства.Вставить("ЗначениеКопирования", ОбъектКопирования.Ссылка);
ИдентификаторПользователяИБ = Неопределено;
ИдентификаторПользователяСервиса = Неопределено;
Подготовлен = Ложь;
Свойства = Новый Структура("КонтактнаяИнформация");
ЗаполнитьЗначенияСвойств(Свойства, ЭтотОбъект);
Если Свойства.КонтактнаяИнформация <> Неопределено Тогда
Свойства.КонтактнаяИнформация.Очистить();
КонецЕсли;
Комментарий = "";
КонецПроцедуры
#КонецОбласти
#КонецЕсли
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли