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