RDT1C/Reports/ирАнализПравДоступа/Ext/ObjectModule.bsl
Администратор 9a629078bc +Добавлен инструмент "Анализ прав доступа"
Отчет кросс-таблица с измерениями
            Пользователь
            Роль
            Объект метаданных
            Право
        и ресурсом Доступ
    Различные значения колонки
        +Добавлен фильтр по подстроке
        +Добавлена кнопка "Установить пометки выделенных или отобранных строк"
    Конструктор запроса
        +Фильтр по подстроке для списка таблиц теперь применяется в процессе ввода
    Консоль кода
        *В режимах выполнения "В фоновом задании" и "На сервере" теперь выявляются и очищаются с выводом сообщений мутабельные выходные параметры без выброса исключения
    Анализ журнала регистрации
        +В форме события реализован переход к пользователю ИБ
    Анализ техножурнала
        +В форме события реализован переход к пользователю ИБ
        +Добавлена явная поддержка свойства Cycles события SCRIPTCIRCREFS (циклические ссылки)
    Динамический список
        +Добавлен индикатор наличия ограничения доступа к строкам (RLS)
    Общее
        *При ошибке вычислении количества строк в таблице из-за ограничения доступа к строкам теперь не показывается системное окно с ошибкой
        +При загрузке снимка объекта для отладки теперь выдается сообщение с именем оригинального пользователя, если он отличается от текущего
        *Ускорено не первое в сеансе открытие файлов в конфигураторе из инструментов при наличии антивируса
        *Ускорено открытие файлов в конфигураторе из инструментов на 8.3.12+
    Параметры вывода строк таблицы
        +Добавлен флажок "Колонки размеров" для вычисления размеров хранилищ значений и строк неограниченной длины
    Форма хранилища значения
        + Добавлено поле размера хранилища
    Интерфейсная панель
        +В контекстном меню добавлена команда "Анализ прав доступа"
    Редактор пользователей
        +В командной панели списка пользователей добавлена команда "Анализ прав доступа"
    Подбор и обработка объектов БД
        *Устранено ошибочное доступное поле "Количество строк" при включении флажка "подключать таблицы движений"
    Анализ журнала регистрации
        *Возвращена сортировка по возрастанию хронологии
2018-11-11 20:33:14 +03:00

169 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.

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