Проверка ролей пользователя

Идея обработки родилась после очередного трудоустройства, в конфе было создано over9000 ролей и каждый раз нырять в конфигуратор после заявки «у меня недостаточно прав» решил сделать такую обработку, так сказать, чтобы не стать Шерлоком в поисках нужного и не плодить или грамотно добавлять роли после анализа. На роль дизайнера не претендую, поэтому тапками не кидать за внешний вид)))))

Как работает:
1) Вы выбираете ВИД метаданных, "Константы, Справочники, Документы, ПВХ"
2) Выбираете ТИП вида метаданных
3) Выбираете ПОЛЬЗОВАТЕЛЯ, у которого хотите проверить доступ на выбранный тип
4) Жмете кнопку ПРОВЕРИТЬ

После этих действий заполняется таблица всех возможных прав для созданных в программе ролей, теми значениями, которые доступны выбранному пользователю, т.е.  вы выбрали вид СПРАВОЧНИК  и тип ФИЗ ЛИЦА, после нажатия на кнопку проверить, вы увидите, что данный пользователь сможет сделать с данным справочником. После чего заполнятся таблица по регистрам сведений, в которых этот справочник упомянут и так же указываются доступные действия над указанными регистрами сведений, углубляться не стал вывел чтение и изменение. Если вам нужно выяснить, какую роль нужно добавить пользователю, чтобы он смог выполнить действие, которое ему недоступно, например УДАЛЕНИЕ, просто щелкаете по строчке, где написано это действие, в таблице отметятся роли, при добавлении которых пользователю можно разрешить данное действие, также в таблице доступных ему ролей отобразятся роли, которые ему доступны. Также при нажатии кнопки проверить заполнятся данные по регистрам движений, если вы выберите документ, которые будут дополнены показаниями о возможности чтения и редактирования. 

Данная обработка тестировалась как на обычном интерфейсе, так и на управляемом. Конфигурация, на которой тестилась, УПП 1.3, думаю подойдет к любой конфигурации, т.к. использовались общие механизмы метаданных. Платформа, на которой тестировалась обработка, 1С:Предприятие 8.3 (8.3.10.2466).

P.S. Если что то подобное есть, подскажите, я что-то не нашел.

UPD для тех, кто скачал до 12.07.2024. Не корректно отображались роли выбранного пользователя.

для УФ обновить процедуру

&НаСервере
Процедура ПраваНаОбъектВыборНаСервере(Право)
ОбъектМетаданных = Метаданные[Вид][Тип];
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ);
Если ОбъектМетаданных = Неопределено Тогда
Возврат;
КонецЕсли;
РолиПОльзователя = ПользовательИБ.Роли;
ДоступныеРоли.Очистить();
Для Каждого РольМД Из Метаданные.Роли Цикл
Отбор = Новый Структура("Роль",РольМД.Синоним);
НайденныеСтроки = УчастиеВРолях.НайтиСтроки(Отбор);
НайденнаяСтрока = НайденныеСтроки[0];
Попытка
Разрешено = ПравоДоступа(Право,ОбъектМетаданных,РольМД);
НайденнаяСтрока.Действие = Разрешено;
Если РолиПОльзователя.Содержит(РольМД) Тогда
ДоступнаяРоль = ДоступныеРоли.Добавить();
ДоступнаяРоль.Роль = РольМД;
КонецЕсли;
Исключение
НайденнаяСтрока.Действие = Ложь;
КонецПопытки;
КонецЦикла;
КонецПроцедуры


 

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


КонецПроцедуры

 

 

 

1 Comment

  1. sansys

    Очень полезная обработка, однозначно плюс! Возьму в копилку.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *