gifts2017

Права и роли 1с v8

Опубликовал Олег Бращин (JieroJiac) в раздел Администрирование - Защита, права, пароли

Простая обработка для получения разбивки по каждому объекту (документу и справочнику) ролей и прав пользователей.
Долго искал что-то похожее, но кривые руки и, видимо, неумение пользоваться поиском привели к тому, чтобы написать простую обработку для получения разбивки по каждому объекту (документу и справочнику) ролей и прав пользователей.
Звёзд с неба она не хвататет, но дело своё делает.
Привожу код ниже:

// !!! Роли !!!
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Роль");
Для каждого пользователь из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
Для каждого роль из пользователь.роли Цикл
Строка = ТЗ.Добавить();
Строка.Роль = Роль;     
КонецЦикла;
КонецЦикла;
ТЗ.Свернуть("Роль");
ИспользуемыеРолиБезПовторов = ТЗ;

// !!! Документы !!!
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Документ");
Для Каждого Документ Из Метаданные.Документы Цикл
Строка = ТЗ.Добавить();
Строка.Документ = Документ;
КонецЦикла;
ТЗ_Документы = ТЗ;

// !!! Справочники !!!
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Справочник");
Для Каждого Справочник Из Метаданные.Справочники Цикл
Строка = ТЗ.Добавить();
Строка.Справочник = Справочник;
КонецЦикла;
ТЗ_Ссправочники = ТЗ;

// !!! Шапка таблицы значений !!!
ТаблицаРезультат = Новый ТаблицаЗначений;
ТаблицаРезультат.Колонки.Добавить("ОбъектМетаданных");
ТаблицаРезультат.Колонки.Добавить("Право");
Для каждого элем из ИспользуемыеРолиБезПовторов Цикл
ТаблицаРезультат.Колонки.Добавить(элем.Роль.Имя);
КонецЦикла; // Роли в ТаблицуРезультат

// !!! Права доступа!!! 
МассивПрав = Новый Массив;
МассивПрав.Добавить("Чтение");
МассивПрав.Добавить("Добавление");
МассивПрав.Добавить("Изменение");
МассивПрав.Добавить("Удаление");
МассивПрав.Добавить("Проведение");
МассивПрав.Добавить("ОтменаПроведения");
МассивПрав.Добавить("Просмотр");
МассивПрав.Добавить("ИнтерактивноеДобавление");
МассивПрав.Добавить("Редактирование");
МассивПрав.Добавить("Использование");
МассивПрав.Добавить("ВводПоСтроке");

// !!! Проверка Документов !!!
Для каждого документ Из ТЗ_Документы Цикл
Для каждого элемент Из МассивПрав Цикл
НоваяСтрокаТЗ = ТаблицаРезультат.Добавить();
НоваяСтрокаТЗ.ОбъектМетаданных = документ.Документ;
НоваяСтрокаТЗ.Право = элемент;
Для каждого роль Из ИспользуемыеРолиБезПовторов Цикл
Колонка      = ТаблицаРезультат.Колонки.Найти(роль.Роль.Имя);
НомерКолонки = ТаблицаРезультат.Колонки.Индекс(Колонка);
НоваяСтрокаТЗ.Установить(НомерКолонки, ПравоДоступа(элемент, документ.Документ, роль.Роль));
КонецЦикла;
КонецЦикла;
КонецЦикла;

// !!! Проверка Справочников!!!
Для каждого справочник Из ТЗ_Ссправочники Цикл
Для каждого элемент Из МассивПрав Цикл
НоваяСтрокаТЗ = ТаблицаРезультат.Добавить();
НоваяСтрокаТЗ.ОбъектМетаданных = справочник.Справочник;
НоваяСтрокаТЗ.Право = элемент;
Для каждого роль Из ИспользуемыеРолиБезПовторов Цикл
Колонка      = ТаблицаРезультат.Колонки.Найти(роль.Роль.Имя);
НомерКолонки = ТаблицаРезультат.Колонки.Индекс(Колонка);
НоваяСтрокаТЗ.Установить(НомерКолонки, ПравоДоступа(элемент, справочник.Справочник, роль.Роль));
КонецЦикла;
КонецЦикла;
КонецЦикла;






Скачать файлы

Наименование Файл Версия Размер
ПолучениеПравНаОбъектыСистемыПоРолямПользователей 21
.epf 6,55Kb
29.07.14
21
.epf 0.0.1 6,55Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Руслан Микулович (rumik007) 29.07.14 18:05
а нажать в конфигураторе правой кнопкой по ОБЩИЕ \ Роли и выбрать ВСЕ РОЛИ и получиться без кода и без веловипеда + можно смотреть ограничения.
JieroJiac; +1 Ответить
3. Константин Куликов (Светлый ум) 30.07.14 04:07
4. Олег Бращин (JieroJiac) 30.07.14 10:28
(1)rumik007, Это всё хорошо, но что делать с той таблицей? Или ты предлагаешь в xml грузить?) Видел я что получается. Только по одному объекту(документу) порядка 5000 строчек в xml файле. Потому и пришлось писать что-то своё.

Ограничения были не так важны. И с их выводом тоже проблем нет, если нужно. Но в своей результирующей таблице я сразу вижу нужные мне права на объекты в разрезе ролей.

(2) AlX0id, (3) Светлый ум, Это всё хорошо и прекрасно. Но такому пользователю, как мне - не поможет =) ибо 0$m и как-то почерпнуть важную инфу очень сложно. Потому и приложил текст модуля. Чтобы было быстро понятно что и как ^_^
5. Алекс Алекс (letchik2000) 30.10.14 20:34
на УТ10.3 1С 8.2 как будет работать?
6. Алексей 1 (AlX0id) 03.11.14 15:18
(4) JieroJiac,
Если 0СМ - открою один секрет.. Можно поискать в интернете по названию ;) Не так уж редко находится или обработка, или аналог )