СрезРазрешений (БСП)

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

Срез разрешений. Возвращает текущий срез предоставленных разрешений.

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

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

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

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

Срезы последних (интерполяция периодических сведений)

ДобавитьРазрешение (БСП)

УдалитьРазрешение (БСП)

Создать временную таблицу по имени регистра СрезПоследних

Разрешения (БСП)

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