RDT1C/Reports/ирАнализПравДоступа/Ext/ObjectModule.bsl
Администратор bf8497473c .
2020-12-28 01:52:57 +03:00

161 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирПривилегированный Экспорт;
Перем РежимОтладки Экспорт;
Перем ТаблицаПрав Экспорт;
Перем Роли Экспорт;
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
#Если _ Тогда
СхемаКомпоновки = Новый СхемаКомпоновкиДанных;
КонечнаяНастройка = Новый НастройкиКомпоновкиДанных;
ВнешниеНаборыДанных = Новый Структура;
ДокументРезультат = Новый ТабличныйДокумент;
#КонецЕсли
СтандартнаяОбработка = Ложь;
ПрофилиГруппДоступа = Новый ТаблицаЗначений;
ПрофилиГруппДоступа.Колонки.Добавить("РольИмя", Новый ОписаниеТипов("Строка"));
ПрофилиГруппДоступа.Колонки.Добавить("ПрофильГруппДоступа", Новый ОписаниеТипов("Строка"));
ПрофилиГруппДоступа.Колонки.Добавить("КоличествоРолей", Новый ОписаниеТипов("Число"));
Если ирКэш.НомерВерсииБСПЛкс() >= 200 Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"
|ВЫБРАТЬ
| ПрофилиГруппДоступаРоли.Ссылка КАК ПрофильГруппДоступа,
| Профили.КоличествоРолей КАК КоличествоРолей,
| ПрофилиГруппДоступаРоли.Роль.Имя КАК РольИмя
|ИЗ
| Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ПрофилиГруппДоступа_РолиТ.Ссылка КАК Ссылка,
| КОЛИЧЕСТВО(ПрофилиГруппДоступа_РолиТ.Роль) КАК КоличествоРолей
| ИЗ
| Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступа_РолиТ
|
| СГРУППИРОВАТЬ ПО
| ПрофилиГруппДоступа_РолиТ.Ссылка) КАК Профили
| ПО Профили.Ссылка = ПрофилиГруппДоступаРоли.Ссылка
|";
ПрофилиГруппДоступа = Запрос.Выполнить().Выгрузить();
КонецЕсли;
РолиПользователей = Новый ТаблицаЗначений;
РолиПользователей.Колонки.Добавить("Роль", Новый ОписаниеТипов("Строка"));
РолиПользователей.Колонки.Добавить("Пользователь", Новый ОписаниеТипов("Строка"));
Если ПравоДоступа("Администрирование", Метаданные) Тогда
ДоступныеПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Иначе
ДоступныеПользователи = Новый Массив;
ДоступныеПользователи.Добавить(ПользователиИнформационнойБазы.ТекущийПользователь());
КонецЕсли;
Для Каждого ПользовательИБ Из ДоступныеПользователи Цикл
#Если Сервер И Не Сервер Тогда
ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
#КонецЕсли
Для Каждого РольЦикл Из ПользовательИБ.Роли Цикл
СтрокаРоли = РолиПользователей.Добавить();
СтрокаРоли.Роль = РольЦикл.Имя;
СтрокаРоли.Пользователь = ПользовательИБ.Имя;
КонецЦикла;
КонецЦикла;
ТаблицаРоли = Новый ТаблицаЗначений;
ТаблицаРоли.Колонки.Добавить("Роль", Новый ОписаниеТипов("Строка"));
ТаблицаРоли.Колонки.Добавить("УстанавливатьПраваДляНовыхОбъектов");
ТаблицаРоли.Колонки.Добавить("НезависимыеПраваПодчиненныхОбъектов");
ТаблицаРоли.Колонки.Добавить("УстанавливатьПраваДляРеквизитовИТабличныхЧастейПоУмолчанию");
Если ИзвлечьСвойстваРолей Тогда
мПлатформа = ирКэш.Получить();
#Если Сервер И Не Сервер Тогда
мПлатформа = Обработки.ирПлатформа.Создать();
#КонецЕсли
Для Каждого МетаРоль Из Роли Цикл
ФайлРоли = Новый Файл("" + мПлатформа.СтруктураПодкаталоговФайловогоКэша.КэшРолей.ПолноеИмя + "\Роль." + МетаРоль.Имя + ".Права.xml");
Если Не ФайлРоли.Существует() Тогда
Сообщить("В кэше ролей не обнаружен файл роли """ + МетаРоль.Имя + """. Для извлечения свойств этой роли необходимо обновить кэш прав.");
Продолжить;
КонецЕсли;
СтрокаРоли = ТаблицаРоли.Добавить();
СтрокаРоли.Роль = МетаРоль.Имя;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ФайлРоли.ПолноеИмя);
ЧтениеXML.Прочитать();
Для Счетчик = 1 По 3 Цикл
ЧтениеXML.Прочитать();
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если ЧтениеXML.ЛокальноеИмя = "setForNewObjects" Тогда
ЧтениеXML.Прочитать();
СтрокаРоли.УстанавливатьПраваДляНовыхОбъектов = Булево(ЧтениеXML.Значение);
ИначеЕсли ЧтениеXML.ЛокальноеИмя = "setForAttributesByDefault" Тогда
ЧтениеXML.Прочитать();
СтрокаРоли.НезависимыеПраваПодчиненныхОбъектов = Булево(ЧтениеXML.Значение);
ИначеЕсли ЧтениеXML.ЛокальноеИмя = "independentRightsOfChildObjects" Тогда
ЧтениеXML.Прочитать();
СтрокаРоли.УстанавливатьПраваДляРеквизитовИТабличныхЧастейПоУмолчанию = Булево(ЧтениеXML.Значение);
КонецЕсли;
ЧтениеXML.Прочитать();
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Если ВычислятьФункциональныеОпции Тогда
ФункциональныеОпции.Очистить();
Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл
Попытка
ЗначениеОпции = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя);
Исключение
// Опция с параметрами
Продолжить;
КонецПопытки;
СтрокаТаблицы = ФункциональныеОпции.Добавить();
СтрокаТаблицы.ФункциональнаяОпция = ФункциональнаяОпция.Имя;
СтрокаТаблицы.ФункциональнаяОпцияВключена = ЗначениеОпции;
КонецЦикла;
КонецЕсли;
КонечнаяНастройка = КомпоновщикНастроек.ПолучитьНастройки();
Если ЗначениеЗаполнено(Пользователь) Тогда
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КонечнаяНастройка, "Пользователь", Пользователь,,, Ложь);
КонецЕсли;
Если ЗначениеЗаполнено(ОбъектМетаданных) Тогда
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КонечнаяНастройка, "ОбъектМетаданных", ОбъектМетаданных,,, Ложь);
КонецЕсли;
Если ЗначениеЗаполнено(Роль) Тогда
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КонечнаяНастройка, "Роль", Роль,,, Ложь);
КонецЕсли;
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ПрофилиГруппДоступа", ПрофилиГруппДоступа);
ВнешниеНаборыДанных.Вставить("РолиПользователей", РолиПользователей);
ВнешниеНаборыДанных.Вставить("Роли", ТаблицаРоли);
ВнешниеНаборыДанных.Вставить("Таблица", ТаблицаПрав);
ВнешниеНаборыДанных.Вставить("ФункциональныеОпции", ФункциональныеОпции);
ВнешниеНаборыДанных.Вставить("ФункциональныеОпцииПолей", ФункциональныеОпцииПолей);
Если РежимОтладки = 2 Тогда
ирОбщий.ОтладитьЛкс(СхемаКомпоновкиДанных, , КонечнаяНастройка, ВнешниеНаборыДанных);
Возврат;
КонецЕсли;
ДокументРезультат.Очистить();
ирОбщий.СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновкиДанных, КонечнаяНастройка, ДокументРезультат, ВнешниеНаборыДанных, ДанныеРасшифровки);
КонецПроцедуры
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
//ирПортативный #Если Клиент Тогда
//ирПортативный Контейнер = Новый Структура();
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный ирПортативный.Открыть();
//ирПортативный КонецЕсли;
//ирПортативный #Иначе
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
//ирПортативный #КонецЕсли
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
РежимОтладки = 0;