Перейти к содержимому

Как проверить роль пользователя программно 1с

  • автор:

Проверка прав доступа

Область применения: управляемое приложение, обычное приложение.

1. В случае большого количества ролей в конфигурации (от нескольких десятков) не рекомендуется использовать ролевую настройку видимости в элементах форм (просмотр и редактирование реквизитов по ролям, пользовательскую видимость полей формы по ролям, использование команд по ролям). Вместо этого следует придерживаться следующих подходов:

  • при сильных различиях внешнего вида и функциональности формы в зависимости от наличия тех или иных ролей у пользователя – разрабатывать отдельные формы, специализированные под конкретный набор прав пользователя;
  • при незначительных отличиях – выполнять проверку прав в коде. При этом следует иметь в виду, что программное управление видимостью может снизить скорость открытия формы, что нужно учитывать при выборе между предлагаемыми подходами.

Эти меры позволяют:

  • существенно упростить работу из кода с элементами управления, которые пропадают из коллекции Элементы (код Элементы.ИмяЭлемента.ИмяСвойства становится нерабочим);
  • повысить устойчивость кода к пересмотру состава ролей в конфигурации;
  • организовать контроль использования ролей в конфигурации (в противном случае, выполнять анализ прав доступа по флажкам, назначенных для ролей в различных элементах произвольных форм конфигурации, крайне затруднительно).

2. Не рекомендуется использовать ролевую настройку видимости в командном интерфейсе конфигурации, командном интерфейсе основного раздела, а также рабочей области начальной страницы. Вместо этого следует использовать настройку прав на разделы командного интерфейса, общие формы и объекты, включенные в командный интерфейс или в рабочую область. Это позволяет повысить предсказуемость поведения управляемого интерфейса для пользователя, а также упростить расследование ошибок.

3. Для проверки прав доступа в коде следует использовать метод ПравоДоступа .
Например, неправильно:

Если РольДоступна(«ДобавлениеИзменениеСтранМира») Тогда .
Если РольДоступна(«ПросмотрОтчетаПопулярныеСтраны») Тогда .

Если ПравоДоступа(«Редактирование», Метаданные.Справочники.СтраныМира) Тогда .
Если ПравоДоступа(«Просмотр», Метаданные.Отчеты.ПопулярныеСтраны) Тогда .

Такой подход позволяет повысить устойчивость кода к пересмотру состава ролей в конфигурации.

4.1. В тех случаях, где роль не дает никаких прав на объекты метаданных, а служит только для определения того или иного дополнительного права, следует использовать метод РольДоступна . При использовании в конфигурации Библиотеки стандартных подсистем (БСП) следует использовать функцию РолиДоступны общего модуля Пользователи :
Например, без использования БСП:

Если РольДоступна(. ) Или Или ПривилегированныйРежим() Тогда .

Либо аналогичная проверка с использованием БСП:

Если Пользователи.РолиДоступны(. ) Тогда .

4.2. Следует проектировать роли с учетом их влияния на командный интерфейс. В тех случаях, когда чтение или запись данных ведется в привилегированном режиме, не следует указывать в роли права с условием ограничения на уровне записей (RLS) ГДЕ ЛОЖЬ . Вместо этого следует проверять наличие роли.

Например, права на общую форму Заметка дают роли ДобавлениеИзменениеЗаметок и ЧтениеЗаметок . Обращение к данным заметок при этом выполняется в привилегированном режиме. В этом случае с помощью метода ПравоДоступа невозможно определить, можно ли пользователю добавлять заметки по наличию права на форму Заметка .

Добавить в роль ДобавлениеИзменениеЗаметок фиктивные права на регистр сведений Заметки (с условием ограничения ГДЕ ЛОЖЬ ) и выполнять проверку:
Если ПравоДоступа(«Редактирование», Метаданные.РегистрыСведений.Заметки) Тогда

Если РольДоступна( «ДобавлениеИзменениеЗаметок» ) Или Или ПривилегированныйРежим() Тогда

Либо аналогичная проверка с использованием БСП:

// АПК:515-выкл — №737.4.2 – Допустимо проверять роль, так как в ней нет прав,
// позволяющих определить может ли пользователь добавлять заметки.
Если Пользователи.РолиДоступны(«ДобавлениеИзменениеЗаметок») Тогда
// АПК:515-вкл

  • Стандартные роли
  • Разработка ролей в библиотеках

Разработчику о работе с 1С:Предприятие, Pascal, Паскаль

Решение вопросов, возникающие при автоматизации учета с помощью 1С:Предприятие. Паскаль.

Как проверить роль пользователя в 1С, программно?

06.01.2017 | Автор Дмитрий

Как проверить роль пользователя в 1С, программно?

Процедура КакПроверитьРольПользователяв1С() Если НЕ РольДоступна("ПолныеПрава") Тогда Сообщить("Необходимы ""Полные права"" !"); Отказ = Истина; Возврат; КонецЕсли КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) // Вставить содержимое обработчика. КакПроверитьРольПользователяв1С(); КонецПроцедуры

Ответ на вопрос: Как проверить роль пользователя в 1С, программно?

Рубрика: 1С:Предприятие 8.2

Как проверить роль пользователя программно 1с

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

РольДоступна

> Нужно если определенной роли нет, то не давать его выбирать.

в УФ реализовано

(1) Это для текущего пользователя.
(0) ПользовательИнформационнойБазы.Роли
тогда пользовательИБлюбой.Роли.Содержит()

оуу, вот кажется нашёл

//определим пользовтаеля ИБ
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ);

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

Программная работа с Ролями в 1С

Роль — это объект метаданных, предназначенный для описания набора разрешенных действий (прав). Каждому пользователю прикладного решения может быть назначена одна или несколько ролей. Пользователь будет иметь право на объект, если хотя бы одна из назначенных ему ролей предоставляет право на этот объект. При попытке получить доступ к объекту, на который у пользователя нет прав, выдается ошибка:

Окно ошибки при нарушении прав доступа в 1С

В ролях можно управлять доступом не только на уровне объектов метаданных, но и на уровне объектов базы данных. Например, можно указать, что пользователю с определенной ролью разрешено изменять справочник Номенклатура, но только те его элементы, которые не помечены на удаление. Этот механизм называется RLS — Row Level Security (ограничение доступа на уровне записей).

Привилегированный режим работы

В системе есть возможность временно отключить проверку прав доступа. Такой режим называется привилегированным. В привилегированном режиме разрешены любые операции с базой и не производится контроль RLS.

Включение привилегированного режима осуществляется методом

Если вызвать метод УстановитьПривилегированныйРежим (Ложь) большее количество раз, чем УстановитьПривилегированныйРежим (Истина) , то будет вызвано исключение.

Получить текущее значение привилегированного режима можно функцией

которая возвращает значение типа Булево.

Безопасный режим работы

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

В безопасном режиме:

  • привилегированный режим отменяется, а попытка перехода в привилегированный режим игнорируется;
  • запрещено использование внешних средств по отношению к 1С (доступ к файловой системе, доступ к интернету, загрузка внешних компонент, механизмы COM).

Включение безопасного режима осуществляется методом

Если вызвать метод УстановитьБезопасныйРежим (Ложь) большее количество раз, чем УстановитьБезопасныйРежим (Истина) , то будет вызвано исключение.

Получить текущее значение безопасного режима можно функцией

которая возвращает значение типа Булево.

Программная работа с Ролями

Для проверки доступности Роли текущему пользователю:

РольДоступна (< НаименованиеРоли >)
// Пример использования:
ЭтоАдминистратор = РольДоступна ( Метаданные . Роли . АдминистраторСистемы );
//Тот же самый результат можно получить так:
ЭтоАдминистратор = РольДоступна ( «АдминистраторСистемы» );

Для определения права доступа (чтение, изменение и т.д.) к объекту метаданных:

ПравоДоступа (< Право >, < ОбъектМетаданных >, < Пользователь/Роль >, < СтандартныйРеквизитСтандартнаяТабличнаяЧасть >)
// Пример использования: проверка у текущего пользователя права на изменение справочника ФизическиеЛица
МожноРедактироватьФизЛиц = ПравоДоступа ( «Изменение» , Метаданные . Справочники . ФизическиеЛица );

Для проверки прав доступа текущего пользователя на объект метаданных:

ВыполнитьПроверкуПравДоступа (< Право >, < ОбъектМетаданных >, < СтандартныйРеквизитСтандартнаяТабличнаяЧасть >)
//Примеры использования:
ВыполнитьПроверкуПравДоступа ( «ИнтерактивноеОткрытиеВнешнихОбработок» , Метаданные );
ВыполнитьПроверкуПравДоступа ( «ИнтерактивнаяПометкаУдаления» , Метаданные . Справочники . ФизическиеЛица );

Процедура ВыполнитьПроверкуПравДоступа () отличается от функции ПравоДоступа () тем, что доступна только для текущего пользователя. При отсутствии права вызывается исключение, а в журнал регистрации пишется событие ОтказВДоступе.

Для получение информации о праве доступа на определенный объект метаданных для пользователя или роли с учетом указанных полей:

ПараметрыДоступа (< НаименованиеПрава >, < ОбъектМетаданных >, < СписокПолей >, < Пользователь/Роль >)
//Пример использования:
ПараметрыДоступа = ПараметрыДоступа ( «Чтение» , Метаданные . РегистрыСведений . ТекущиеКадровыеДанныеСотрудников , «ТекущаяОрганизация,ФизическоеЛицо» );
ЕстьДоступ = ПараметрыДоступа . Доступность ;
ОграничениеRLS = ПараметрыДоступа . ОграничениеУсловием ;

Для получения представления права по имени:

ПредставлениеПрава (< ИмяПрава >)
//Пример использования:
Представление = ПредставлениеПрава ( «ИнтерактивноеОткрытиеВнешнихОбработок» );
// Переменная Представление будет содержать строку «Интерактивное открытие внешних обработок»

Программная работа с Ролями в БСП

В типовых конфигурациях, построенных на Библиотеке стандартных подсистем, в общих модулях есть методы для работы с ролями. Вот некоторые из них:

Пользователи . РолиДоступны ( ИменаРолей , Пользователь = Неопределено, УчитыватьПривилегированныйРежим = Истина)
Пользователи . ЭтоПолноправныйПользователь ( Пользователь = Неопределено, ПроверятьПраваАдминистрированияСистемы = Ложь, УчитыватьПривилегированныйРежим = Истина)
УправлениеДоступом . ЕстьРоль (Знач Роль , Знач СсылкаНаОбъект = Неопределено, Знач Пользователь = Неопределено)
УправлениеДоступом . ЕстьПраво ( Право , СсылкаНаОбъект , Пользователь = Неопределено)
УправлениеДоступом . ЧтениеРазрешено ( ОписаниеДанных )
УправлениеДоступом . ИзменениеРазрешено ( ОписаниеДанных )
УправлениеДоступом . ОграничиватьДоступНаУровнеЗаписей ()
УправлениеДоступом . ПраваПоИдентификаторам ( Идентификаторы = Неопределено)

В общих модулях у каждого метода есть подробное описание. Там можно посмотреть описание самого метода, входных параметров и возвращаемого значения.

Добавить комментарий

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