Программно проверить наличие роли у пользователя 1С
Если вам в программном коде 1С 8 необходимо проверить установлена ли какая либо роль у текущего пользователя, то воспользуйтесь функцией глобального контекста РольДоступна(<Роль>) , которая возвращает значение Истина, если указанная в скобках роль доступна и Ложь, если не доступна. Наименование проверяемой роли следует писать в кавычках.
Пример: При проведении некоторого документа вам нужно проверять установлена ли у пользователя проводящего его роль ПолныеПрава, если доступна то выполнять процедуру проведения, если нет, то выдавать сообщение: “Для проведения данного документа необходима роль Полные права”.
Решение: В начале процедуры ОбработкаПроведения напишите следующий код:
Как программно проверить наличие роли у конкретного пользователя?
> Нужно если определенной роли нет, то не давать его выбирать.
в УФ реализовано
оуу, вот кажется нашёл
//определим пользовтаеля ИБ
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ);
Если ПользовательИБ.Роли.Содержит(Метаданные.Роли["СозданиеНовыхДоговоров"]) Тогда
Возврат Истина;
Иначе
ТекстОшибки = "У пользователя " + Пользователь + " нет прав на работу с Договорами";
Возврат Ложь;
КонецЕсли;
Проверить наличие роли у текущего пользователя 1с
Часто требуется проверить, доступна ли пользователю та или иная роль. Для этого есть функция из глобального контекста РольДоступна(<Роль>). Если указанная роль доступна текущему пользователю, то будет возвращено значение Истина, иначе Ложь.
Один комментарий
Также в типовых конфигурациях на базе БСП можно воспользоваться функцией общего модуля Пользователи.РолиДоступны(ИменаРолей, Пользователь = Неопределено, УчитыватьПривилегированныйРежим = Истина) для проверки доступности сразу нескольких ролей.
Проверка наличия роли у пользователя
Проверка с помощью функции глобального контекста РольДоступна()
Если в программном коде необходимо проверить установлена ли какая-либо роль у текущего пользователя, то можно воспользоваться функцией глобального контекста РольДоступна(<Роль>), которая возвращает значение Истина, если указанная в скобках роль доступна и Ложь, если не доступна.
Однако, в конфигурациях на основе БСП при включении пользователя в предопределенную группу доступа Администраторы, пользователю назначаются только две роли: Полные права и Администрирование (в этом можно убедиться с помощью Конфигуратора: Администрирование — Пользователи — Пользователь — Прочие). Все остальные роли отключаются вне зависимости от того, включен ли пользователь в какие-либо еще группы доступа. Система считает, что другие роли этому пользователю не нужны. Поэтому функция РольДоступна() возвращает в этом случае Ложь, что не подходит для решения нашей задачи.
Проверка с помощью функций БСП
Проверить наличие роли можно также с помощью функций БСП: Пользователи.РолиДоступны() и УправлениеДоступом.ЕстьРоль(). Но данные функции для полноправного пользователя (с ролями Полные права или Администратор системы) вернут всегда Истину независимо от того, назначена ли данная роль пользователю или нет:
Можно было пойти по легкому пути, скопировать данные функции и убрать в них проверку на полноправного пользователя, но мы не ищем легких путей это бы нам не помогло, так как функция Пользователи.РолиДоступны() все равно используют функцию глобального контекста РольДоступна(), а функция УправлениеДоступом.ЕстьРоль() слишком громоздка (текст функции около 300 строк при этом текст основного запроса около 200 строк).
Таким образом, все перечисленные известные функции не подходят для решения нашей задачи.
Решение
Для решения этой задачи в любой конфигурации на базе БСП я использую свою функцию:
Буду признателен, если Вы будите делиться своим опытом решения данной задачи.