База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как в 1С программно найти роли с указанным правом? › Ответ в теме: Как в 1С программно найти роли с указанным правом?
Чтобы программно найти роли, которые имеют заданное право на объект метаданных, можно использовать регистр сведений «ПраваРолей» (РегистрСведений.ПраваРолей). В этом регистре хранятся права ролей на объекты метаданных.
Пример кода на 1С (BSL), который ищет роли с заданным правом (например, «Чтение») на конкретный объект метаданных:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Функция НайтиРолиСПравом(ОбъектМетаданных, ИмяПрава) Экспорт Результат = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = |ВЫБРАТЬ | ПраваРолей.Роль КАК Роль, | ПраваРолей.ОбъектМетаданных КАК ОбъектМетаданных, | ПраваРолей.Чтение КАК Чтение, | ПраваРолей.Изменение КАК Изменение, | ПраваРолей.Добавление КАК Добавление, | ПраваРолей.Удаление КАК Удаление |ИЗ | РегистрСведений.ПраваРолей КАК ПраваРолей |ГДЕ | ПраваРолей.ОбъектМетаданных = &ОбъектМетаданных | И | ВЫБОР | КОГДА &ИмяПрава = "Чтение" ТОГДА ПраваРолей.Чтение | КОГДА &ИмяПрава = "Изменение" ТОГДА ПраваРолей.Изменение | КОГДА &ИмяПрава = "Добавление" ТОГДА ПраваРолей.Добавление | КОГДА &ИмяПрава = "Удаление" ТОГДА ПраваРолей.Удаление | ИНАЧЕ ЛОЖЬ | КОНЕЦ"; Запрос.УстановитьПараметр("ОбъектМетаданных", ОбъектМетаданных); Запрос.УстановитьПараметр("ИмяПрава", ИмяПрава); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Результат.Добавить(Выборка.Роль); КонецЦикла; Возврат Результат; КонецФункции |
Как использовать:
|
1 2 3 4 5 6 |
// Например, ищем роли с правом "Чтение" на справочник "Контрагенты" Роли = НайтиРолиСПравом(Метаданные.Справочники.Контрагенты, "Чтение"); Для Каждого Роль Из Роли Цикл Сообщить(Роль); КонецЦикла; |
Объяснение:
— В регистре «ПраваРолей» есть поля с булевыми значениями для каждого права (Чтение, Изменение, Добавление, Удаление).
— В запросе фильтруем по объекту метаданных и по нужному праву.
— Возвращаем список ролей, у которых это право установлено.
Если нужно искать роли с правом на любой объект, можно убрать фильтр по объекту и искать по праву в целом.
Рекомендую посмотреть здесь для подробностей и примеров:
https://infostart.ru/public/1176543/ (статья про права ролей и их программное получение)