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