Область применения: управляемое приложение, обычное приложение.
1. В случае большого количества ролей в конфигурации (от нескольких десятков) не рекомендуется использовать ролевую настройку видимости в элементах форм (просмотр и редактирование реквизитов по ролям, пользовательскую видимость полей формы по ролям, использование команд по ролям). Вместо этого следует придерживаться следующих подходов:
Эти меры позволяют:
2. Не рекомендуется использовать ролевую настройку видимости в командном интерфейсе конфигурации, командном интерфейсе основного раздела, а также рабочей области начальной страницы. Вместо этого следует использовать настройку прав на разделы командного интерфейса, общие формы и объекты, включенные в командный интерфейс или в рабочую область. Это позволяет повысить предсказуемость поведения управляемого интерфейса для пользователя, а также упростить расследование ошибок.
3. Для проверки прав доступа в коде следует использовать метод ПравоДоступа.
Например, неправильно:
Если РольДоступна("ДобавлениеИзменениеСтранМира") Тогда ...
Если РольДоступна("ПросмотрОтчетаПопулярныеСтраны") Тогда ...
правильно:
Если ПравоДоступа("Редактирование", Метаданные.Справочники.СтраныМира) Тогда ...
Если ПравоДоступа("Просмотр", Метаданные.Отчеты.ПопулярныеСтраны) Тогда ...
Такой подход позволяет повысить устойчивость кода к пересмотру состава ролей в конфигурации.
4.1. В тех случаях, где роль не дает никаких прав на объекты метаданных, а служит только для определения того или иного дополнительного права, следует использовать метод РольДоступна. При использовании в конфигурации Библиотеки стандартных подсистем (БСП) следует использовать функцию РолиДоступны общего модуля Пользователи:
Например, без использования БСП:
Если РольДоступна(...) Или <ЭтоПолноправныйПользователь> Или ПривилегированныйРежим() Тогда ...
Либо аналогичная проверка с использованием БСП:
Если Пользователи.РолиДоступны(...) Тогда ...
4.2. Следует проектировать роли с учетом их влияния на командный интерфейс. В тех случаях, когда чтение или запись данных ведется в привилегированном режиме, не следует указывать в роли права с условием ограничения на уровне записей (RLS) ГДЕ ЛОЖЬ. Вместо этого следует проверять наличие роли.
Например, права на общую форму Заметка дают роли ДобавлениеИзменениеЗаметок и ЧтениеЗаметок. Обращение к данным заметок при этом выполняется в привилегированном режиме. В этом случае с помощью метода ПравоДоступа невозможно определить, можно ли пользователю добавлять заметки по наличию права на форму Заметка.
Неправильно:
Добавить в роль ДобавлениеИзменениеЗаметок фиктивные права на регистр сведений Заметки (с условием ограничения ГДЕ ЛОЖЬ) и выполнять проверку:
Если ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.Заметки) Тогда
Правильно:
Если РольДоступна("ДобавлениеИзменениеЗаметок") Или <ЭтоПолноправныйПользователь> Или ПривилегированныйРежим() Тогда
Либо аналогичная проверка с использованием БСП:
// АПК:515-выкл - №737.4.2 – Допустимо проверять роль, так как в ней нет прав,
// позволяющих определить может ли пользователь добавлять заметки.
Если Пользователи.РолиДоступны("ДобавлениеИзменениеЗаметок") Тогда
// АПК:515-вкл
См. также