РолиДоступны (БСП)

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

Роли доступны. Возвращает доступность хотя бы одной из указанных ролей или полноправность

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

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

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

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

РольДоступнаПолныеПрава (БСП)

РолиАдминистратораДоступны (БСП)

ВсеРоли (БСП)

РольВладелец (БСП)

РольАдминистратор (БСП)

РольПользователь (БСП)

РольОператор (БСП)

ПредставлениеРоли (БСП)

ИдентификаторAPIРоли (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз