ПроверитьОписаниеПользователяИБ (БСП)

Автор: 1С
ОбщийМодуль.ПользователиСлужебный
БСП

Проверить описание пользователя. Проверяет корректность заполнения структуры описания пользователя ИБ.

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОписаниеТипаСостоитИзТипа (БСП)

НовоеОписаниеПользователяИБ (БСП)

ПоказатьОписаниеИзмененийСистемы (БСП)

Проверить что переменная соответствует заданному типу

ПроверитьТекущиеНапоминания (БСП)

ПроверитьПраваТекущегоПользователяПриВходе (БСП)

ВключитьЗаданиеКонтрольАктивностиПользователейПриНеобходимости (БСП)

УстановитьФлагОтображенияОписанийДляНовогоПользователя (БСП)

ПроверитьСсылкиНаОбъект (БСП)

TurboConf ИР адаптер 1.82