ДеревоРолей (БСП)

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

Дерево ролей. Возвращает дерево ролей с подсистемами или без них.

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

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

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

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

Обработка проводок по дереву

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

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

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

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

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

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

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

ПроверитьНазначениеРолей (БСП)

1С Менеджер конфигураций