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