В обработках для настройки прав обычно отображается много инфы. Написал обработку с функциями с просмотром полной и выборочной информации по правам:
1. вывод огромной таблички с измерениями "объект метаданных" и "роль" и с реквизитами видов прав и списка пользователей, имеющих роль.
2. вывод прав на выбранный объект метаданных по всем пользователям
3. вывод РОЛей с правами на выбранный объект метаданных и выбранного пользователя
Испытывал на ЗГУ ЗУП 3.1.14.265, на БГУ 2.0.74.37
// 1-ый инструмент. Табличка: в строках пользователи, в колонках роли
&НаСервере
Процедура печать_ролей_пользователейНаСервере()
тз_пользаков = Новый ТаблицаЗначений;
тз_пользаков.Колонки.Добавить("имя_пользователя");
тз_индексов_колонок = Новый ТаблицаЗначений;
тз_индексов_колонок.Колонки.Добавить("имя");
тз_индексов_колонок.Колонки.Добавить("индекс");
сообщ = Новый СообщениеПользователю;
//сообщ.Текст = "---------------- индексы ролей ----------------";
//сообщ.Сообщить();
//сообщ.Текст = "-----------------------------------------------";
//сообщ.Сообщить();
счётчик_1 = 1;
Для каждого Роль Из Метаданные.Роли Цикл
тз_пользаков.Колонки.Добавить(Роль.Имя);
нов_колонка = тз_индексов_колонок.Добавить();
нов_колонка.имя = Роль.Имя;
нов_колонка.индекс = счётчик_1;
//сообщ = Новый СообщениеПользователю;
//сообщ.Текст = " "+счётчик_1+" - "+Роль.Имя;
//сообщ.Сообщить();
счётчик_1 = счётчик_1 + 1;
КонецЦикла;
мас_пользаков = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для каждого тек_польз из мас_пользаков Цикл
//сообщ = Новый СообщениеПользователю;
//сообщ.Текст = " "+тек_польз;
//сообщ.Сообщить();
нов_стр = тз_пользаков.Добавить();
нов_стр.имя_пользователя = тек_польз;
Для счётчик = 1 по (тз_пользаков.Колонки.Количество() - 1) Цикл
нов_стр.Установить(счётчик, Ложь);
КонецЦикла;
Для каждого тек_роли из тек_польз.роли Цикл
найд_кол = тз_индексов_колонок.найти(тек_роли.имя,"имя");
Если (найд_кол = Неопределено) Тогда
сообщ = Новый СообщениеПользователю;
сообщ.Текст = " ошибка кода 1";
сообщ.Сообщить();
Возврат;
КонецЕсли;
нов_стр.Установить(найд_кол.индекс, Истина)
КонецЦикла;
КонецЦикла;
// в отладчике смотри результат - тз_пользаков
сообщ = Новый СообщениеПользователю;
Для каждого тек_колонка из тз_пользаков.Колонки Цикл
сообщ.Текст = сообщ.Текст+" / "+тек_колонка.Имя;
КонецЦикла;
сообщ.Сообщить();
Для каждого тек_стр из тз_пользаков Цикл
сообщ = Новый СообщениеПользователю;
Для тек_индекс = 1 по тз_пользаков.Колонки.Количество() Цикл
сообщ.Текст = сообщ.Текст+" / "+тек_стр.Получить(тек_индекс - 1);
КонецЦикла;
сообщ.Сообщить();
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура печать_ролей_пользователей(Команда)
печать_ролей_пользователейНаСервере();
КонецПроцедуры
// 2-ой инструмент. Содержание роли по правам доступа на объекты метаданных.
// !!%%% Если БСП, то можно смотреть регистр "Права ролей"
&НаСервере
Процедура печать_разрешений_у_выбранной_ролиНаСервере()
// всё основано на ПравоДоступа("Использование", Объект, ТекущаяРоль);
//вар 1
//Для каждого лРоль из Метаданные.Роли Цикл
// Для Каждого лОбъектКоллекции из Метаданные.Справочники Цикл
// ЕстьПраво = ПравоДоступа("Чтение", лОбъектКоллекции, лРоль);
// Если ЕстьПраво Тогда
// .............
// КонецЕсли;
// КонецЦикла;
//КонецЦикла;
//вар 2
//Для каждого Объект из Метаданные["Интерфейсы"] Цикл
// Использование = ПравоДоступа("Использование", Объект, ТекущаяРоль);
// Если Использование Тогда
// НоваяСтрока = ТаблицаРоли.Добавить();
// НоваяСтрока.РольПользователя = ТекущаяРоль;
// НоваяСтрока.РольПользователяИмя = ТекущаяРоль.Имя;
// НоваяСтрока.ВидОбъектаМетаданных = ВидОбъектаМетаданных;
// НоваяСтрока.ОбъектМетаданных = ОбъектМетаданных;
// НоваяСтрока.ОбъектМетаданныхИмя = ОбъектМетаданных.Имя;
// НоваяСтрока.Использование = Использование;
// КонецЕсли;
//КонецЦикла;
//вар 3
//Для каждого ТекПользователь Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
// РолиПользователя = ТекПользователь.Роли;
// Для каждого ТекущаяРольПользователя Из РолиПользователя Цикл
// ...;
// КонецЕсли;
// КонецЦикла;
// КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура печать_прав_у_выбранной_роли(Команда)
печать_разрешений_у_выбранной_ролиНаСервере();
сообщ = Новый СообщениеПользователю;
сообщ.Текст = "Если есть Библиотека Стандартных Подсистем, то можно смотреть регистр ""Права ролей""";
сообщ.Сообщить();
КонецПроцедуры
// 3-ий инструмент. Из каких профилей получает пользователь выбранную роль
&НаСервере
Процедура печать3_всех_профилей_доступа_включающие_рольНаСервере()
запрос = новый Запрос;
запрос.Текст = "ВЫБРАТЬ
| ПрофилиГруппДоступаРоли.Ссылка КАК Ссылка,
| ПрофилиГруппДоступаРоли.Роль КАК Роль
|ИЗ
| Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
|ГДЕ
| ПрофилиГруппДоступаРоли.Роль = &выбр_роль
|
|УПОРЯДОЧИТЬ ПО
| Ссылка";
запрос.УстановитьПараметр("выбр_роль", выбр_роль);
тз_рез = запрос.Выполнить().Выгрузить();
сообщ = Новый СообщениеПользователю;
сообщ.Текст = "все профили включающие роль:";
сообщ.Сообщить();
Для каждого тек_стр из тз_рез Цикл
сообщ.Текст = ""+тек_стр.Ссылка;
сообщ.Сообщить();
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура печать3_всех_профилей_доступа_включающие_роль(Команда)
печать3_всех_профилей_доступа_включающие_рольНаСервере();
КонецПроцедуры
// 4-ый инструмент. Печать таблицы прав доступа к метаданным по пользователям
&НаСервере
Процедура печать4_прав_к_метаданным_по_пользователямНаСервере(ТабДок)
тз_прав_пользаков = Новый ТаблицаЗначений;
тз_прав_пользаков.Колонки.Добавить("Пользователь");
тз_прав_пользаков.Колонки.Добавить("Роль");
тз_прав_пользаков.Колонки.Добавить("Роли_все");
тз_прав_пользаков.Колонки.Добавить("Добавление");
тз_прав_пользаков.Колонки.Добавить("Изменение");
тз_прав_пользаков.Колонки.Добавить("ЧтениеБезОграничения");
тз_прав_пользаков.Колонки.Добавить("ДобавлениеБезОграничения");
тз_прав_пользаков.Колонки.Добавить("ИзменениеБезОграничения");
тз_прав_пользаков.Колонки.Добавить("Просмотр");
тз_прав_пользаков.Колонки.Добавить("ИнтерактивноеДобавление");
тз_прав_пользаков.Колонки.Добавить("Редактирование");
Для каждого ТекПользователь Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
РолиПользователя = ТекПользователь.Роли;
Для каждого ТекущаяРольПользователя Из РолиПользователя Цикл
// заполнение таблицы по тек_роли
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПраваРолей.Добавление КАК Добавление,
| ПраваРолей.Изменение КАК Изменение,
| ПраваРолей.ЧтениеБезОграничения КАК ЧтениеБезОграничения,
| ПраваРолей.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения,
| ПраваРолей.ИзменениеБезОграничения КАК ИзменениеБезОграничения,
| ПраваРолей.Просмотр КАК Просмотр,
| ПраваРолей.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление,
| ПраваРолей.Редактирование КАК Редактирование,
| ПраваРолей.Роль КАК Роль
|ИЗ
| РегистрСведений.ПраваРолей КАК ПраваРолей
|ГДЕ
| ПраваРолей.ОбъектМетаданных = &выбр_объект_метаданных
| И ПраваРолей.Роль.Имя = &выбр_роль";
Запрос.УстановитьПараметр("выбр_объект_метаданных", выбр_объект_метаданных);
Запрос.УстановитьПараметр("выбр_роль", ТекущаяРольПользователя.Имя);
тз_прав_1 = запрос.Выполнить().Выгрузить();
//Для каждого тек_стр_1 из тз_прав_1 Цикл
//КонецЦикла;
Если (тз_прав_1.Количество() = 1) Тогда
тз_прав_1.Колонки.Добавить("Пользователь");
тек_стр_1 = тз_прав_1.Получить(0);
тек_стр_1.Пользователь = ТекПользователь;
// ... скопировать никак ?
//есть ... ЗаполнитьЗначенияСвойств(ТаблицаЗарплат.Добавить(), СтрокаЗарплаты);
// НОВАЯ строка
нов_стр = тз_прав_пользаков.Добавить();
нов_стр.Пользователь = тек_стр_1.Пользователь;
нов_стр.Роль = тек_стр_1.Роль;
нов_стр.Добавление = ?(тек_стр_1.Добавление,1,0);
нов_стр.Изменение = ?(тек_стр_1.Изменение,1,0);
нов_стр.ЧтениеБезОграничения = ?(тек_стр_1.ЧтениеБезОграничения,1,0);
нов_стр.ДобавлениеБезОграничения = ?(тек_стр_1.ДобавлениеБезОграничения,1,0);
нов_стр.ИзменениеБезОграничения = ?(тек_стр_1.ИзменениеБезОграничения,1,0);
нов_стр.Просмотр = ?(тек_стр_1.Просмотр,1,0);
нов_стр.ИнтерактивноеДобавление = ?(тек_стр_1.ИнтерактивноеДобавление,1,0);
нов_стр.Редактирование = ?(тек_стр_1.Редактирование,1,0);
КонецЕсли;
КонецЦикла;
КонецЦикла;
// конвертация колонки в строку
Для каждого тек_стр_п из тз_прав_пользаков Цикл
тек_стр_п.Роли_Все = ", "+СокрЛП(тек_стр_п.Роль);
КонецЦикла;
// свёртка по пользователям
// тз_прав_пользаков.Свернуть("Пользователь, Добавление, Изменение, ЧтениеБезОграничения, ДобавлениеБезОграничения, ИзменениеБезОграничения, Просмотр, ИнтерактивноеДобавление, Редактирование","Роли_Все");
тз_прав_пользаков.Свернуть("Пользователь", "Добавление, Изменение, ЧтениеБезОграничения, ДобавлениеБезОграничения, ИзменениеБезОграничения, Просмотр, ИнтерактивноеДобавление, Редактирование, Роли_Все");
// вывод
ОбъектОбработка = РеквизитФормыВЗначение("Объект");
Макет = ОбъектОбработка.ПолучитьМакет("права_пользователей_на_объект_метаданных");
// Шапка
Область = Макет.ПолучитьОбласть("шапка");
Область.Параметры.выбр_объект_метаданных = выбр_объект_метаданных;
ТабДок.Вывести(Область);
// строки
ОбластьСтр = Макет.ПолучитьОбласть("Строка");
Для каждого тек_стр из тз_прав_пользаков Цикл
ОбластьСтр.Параметры.Заполнить(тек_стр);
//ОбластьСтр.Параметры.сумма = тек_стр.Сумма;
ТабДок.Вывести(ОбластьСтр);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура печать4_прав_к_метаданным_по_пользователям(Команда)
ТабДок = Новый ТабличныйДокумент;
печать4_прав_к_метаданным_по_пользователямНаСервере(ТабДок);
ТабДок.РазмерСтраницы = "A4";
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОтображатьСетку = Истина;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать("права пользователей на объект метаданных");
КонецПроцедуры
// 5-ый инструмент. Печать таблицы прав доступа к метаданным по ВЫБРАННОМУ пользователЮ и подробно по ролям
&НаСервере
Процедура печать5_прав_к_метаданным_по_пользователюНаСервере(ТабДок)
тз_прав_ролей = Новый ТаблицаЗначений;
тз_прав_ролей.Колонки.Добавить("Роль");
тз_прав_ролей.Колонки.Добавить("Добавление");
тз_прав_ролей.Колонки.Добавить("Изменение");
тз_прав_ролей.Колонки.Добавить("ЧтениеБезОграничения");
тз_прав_ролей.Колонки.Добавить("ДобавлениеБезОграничения");
тз_прав_ролей.Колонки.Добавить("ИзменениеБезОграничения");
тз_прав_ролей.Колонки.Добавить("Просмотр");
тз_прав_ролей.Колонки.Добавить("ИнтерактивноеДобавление");
тз_прав_ролей.Колонки.Добавить("Редактирование");
выбр_польз = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(выбр_пользователь.ИдентификаторПользователяИБ);
РолиПользователя = выбр_польз.Роли;
Для каждого ТекущаяРольПользователя Из РолиПользователя Цикл
// заполнение таблицы по тек_роли
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПраваРолей.Добавление КАК Добавление,
| ПраваРолей.Изменение КАК Изменение,
| ПраваРолей.ЧтениеБезОграничения КАК ЧтениеБезОграничения,
| ПраваРолей.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения,
| ПраваРолей.ИзменениеБезОграничения КАК ИзменениеБезОграничения,
| ПраваРолей.Просмотр КАК Просмотр,
| ПраваРолей.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление,
| ПраваРолей.Редактирование КАК Редактирование,
| ПраваРолей.Роль КАК Роль
|ИЗ
| РегистрСведений.ПраваРолей КАК ПраваРолей
|ГДЕ
| ПраваРолей.ОбъектМетаданных = &выбр_объект_метаданных
| И ПраваРолей.Роль.Имя = &выбр_роль";
Запрос.УстановитьПараметр("выбр_объект_метаданных", выбр_объект_метаданных);
Запрос.УстановитьПараметр("выбр_роль", ТекущаяРольПользователя.Имя);
тз_прав_1 = запрос.Выполнить().Выгрузить();
//Для каждого тек_стр_1 из тз_прав_1 Цикл
//КонецЦикла;
Если (тз_прав_1.Количество() = 1) Тогда
тек_стр_1 = тз_прав_1.Получить(0);
// ... скопировать никак ?
//есть ... ЗаполнитьЗначенияСвойств(ТаблицаЗарплат.Добавить(), СтрокаЗарплаты);
// НОВАЯ строка
нов_стр = тз_прав_ролей.Добавить();
нов_стр.Роль = тек_стр_1.Роль;
нов_стр.Добавление = тек_стр_1.Добавление;
нов_стр.Изменение = тек_стр_1.Изменение;
нов_стр.ЧтениеБезОграничения = тек_стр_1.ЧтениеБезОграничения;
нов_стр.ДобавлениеБезОграничения = тек_стр_1.ДобавлениеБезОграничения;
нов_стр.ИзменениеБезОграничения = тек_стр_1.ИзменениеБезОграничения;
нов_стр.Просмотр = тек_стр_1.Просмотр;
нов_стр.ИнтерактивноеДобавление = тек_стр_1.ИнтерактивноеДобавление;
нов_стр.Редактирование = тек_стр_1.Редактирование;
КонецЕсли;
КонецЦикла;
// вывод
ОбъектОбработка = РеквизитФормыВЗначение("Объект");
Макет = ОбъектОбработка.ПолучитьМакет("права_и_роли_пользователя_на_объект_метаданных");
// Шапка
Область = Макет.ПолучитьОбласть("шапка");
Область.Параметры.выбр_объект_метаданных = выбр_объект_метаданных;
Область.Параметры.выбр_пользователь = выбр_пользователь.Наименование;
ТабДок.Вывести(Область);
// строки
ОбластьСтр = Макет.ПолучитьОбласть("Строка");
Для каждого тек_стр из тз_прав_ролей Цикл
ОбластьСтр.Параметры.Заполнить(тек_стр);
//ОбластьСтр.Параметры.сумма = тек_стр.Сумма;
ТабДок.Вывести(ОбластьСтр);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура печать5_прав_к_метаданным_по_пользователю(Команда)
ТабДок = Новый ТабличныйДокумент;
печать5_прав_к_метаданным_по_пользователюНаСервере(ТабДок);
ТабДок.РазмерСтраницы = "A4";
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОтображатьСетку = Истина;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать("права и роли пользователя на объект метаданных");
КонецПроцедуры
// 6-ый инструмент. Печать таблицы прав доступа к метаданным по ВСЕМ ролям и ВСЕМ пользователям
&НаСервере
Процедура печать6_ВСЕХ_ДАННЫХ_ПО_ПРАВАМНаСервере(ТабДок)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных КАК ОбъектМетаданных,
| ПраваРолей.Роль КАК Роль,
| ПраваРолей.Добавление КАК Добавление,
| ПраваРолей.Изменение КАК Изменение,
| ПраваРолей.ЧтениеБезОграничения КАК ЧтениеБезОграничения,
| ПраваРолей.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения,
| ПраваРолей.ИзменениеБезОграничения КАК ИзменениеБезОграничения,
| ПраваРолей.Просмотр КАК Просмотр,
| ПраваРолей.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление,
| ПраваРолей.Редактирование КАК Редактирование
|ИЗ
| РегистрСведений.ПраваРолей КАК ПраваРолей";
тз_прав_1 = запрос.Выполнить().Выгрузить();
тз_прав_1.Колонки.Добавить("Пользователи");
Для каждого тек_стр_1 из тз_прав_1 Цикл
тек_стр_1.Пользователи = "";
КонецЦикла;
Для каждого ТекПользователь Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
РолиПользователя = ТекПользователь.Роли;
Для каждого ТекущаяРольПользователя Из РолиПользователя Цикл
Для каждого тек_стр_1 из тз_прав_1 Цикл
Если (ТекущаяРольПользователя.Имя = тек_стр_1.Роль.Имя) Тогда
// строчка соответствует тек_роли
тек_стр_1.Пользователи = тек_стр_1.Пользователи+" / "+СокрЛП(ТекПользователь);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
//нов_стр.Добавление = ?(тек_стр_1.Добавление,1,0);
//нов_стр.Изменение = ?(тек_стр_1.Изменение,1,0);
//нов_стр.ЧтениеБезОграничения = ?(тек_стр_1.ЧтениеБезОграничения,1,0);
//нов_стр.ДобавлениеБезОграничения = ?(тек_стр_1.ДобавлениеБезОграничения,1,0);
//нов_стр.ИзменениеБезОграничения = ?(тек_стр_1.ИзменениеБезОграничения,1,0);
//нов_стр.Просмотр = ?(тек_стр_1.Просмотр,1,0);
//нов_стр.ИнтерактивноеДобавление = ?(тек_стр_1.ИнтерактивноеДобавление,1,0);
//нов_стр.Редактирование = ?(тек_стр_1.Редактирование,1,0);
// вывод
ОбъектОбработка = РеквизитФормыВЗначение("Объект");
Макет = ОбъектОбработка.ПолучитьМакет("права_пользователей_на_ВСЕ_объекты_метаданных");
// Шапка
Область = Макет.ПолучитьОбласть("шапка");
ТабДок.Вывести(Область);
// строки
ОбластьСтр = Макет.ПолучитьОбласть("Строка");
Для каждого тек_стр из тз_прав_1 Цикл
ОбластьСтр.Параметры.Заполнить(тек_стр);
ТабДок.Вывести(ОбластьСтр);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура печать6_ВСЕХ_ДАННЫХ_ПО_ПРАВАМ(Команда)
ТабДок = Новый ТабличныйДокумент;
печать6_ВСЕХ_ДАННЫХ_ПО_ПРАВАМНаСервере(ТабДок);
ТабДок.РазмерСтраницы = "A4";
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОтображатьСетку = Истина;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать("ВСЕ роли и пользователи с правами на ВСЕ объекты метаданных");
КонецПроцедуры
&НаСервере
Процедура печать7_все_роли_выбр_пользователяНаСервере()
сообщ = Новый СообщениеПользователю;
выбр_польз = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(выбр_пользователь.ИдентификаторПользователяИБ);
РолиПользователя = выбр_польз.Роли;
Для каждого ТекущаяРольПользователя Из РолиПользователя Цикл
сообщ.Текст = ""+ТекущаяРольПользователя;
сообщ.Сообщить();
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура печать7_все_роли_выбр_пользователя(Команда)
печать7_все_роли_выбр_пользователяНаСервере();
КонецПроцедуры