#std737

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

1.

Если в конфигурации много ролей (от нескольких десятков), не используйте ролевую настройку видимости в элементах форм:

  • просмотр/редактирование реквизитов по ролям;
  • пользовательскую видимость полей формы по ролям;
  • использование команд по ролям.

Рекомендуемые подходы:

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

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

Это позволяет:

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

#v8cs:form-item-visible-settings-by-roles

2.

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

Вместо этого настраивайте права на:

  • разделы командного интерфейса;
  • общие формы;
  • объекты, включенные в командный интерфейс или рабочую область.

Это повышает предсказуемость интерфейса и упрощает расследование ошибок.

3.

Для проверки прав в коде используйте метод ПравоДоступа.

Неправильно

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

Правильно

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

Такой подход повышает устойчивость кода к пересмотру состава ролей.

Проверки

#v8cs:using-isinrole

4.1.

Если роль не дает прав на объекты метаданных и служит только маркером дополнительного права, используйте РольДоступна.

При использовании БСП рекомендуется Пользователи.РолиДоступны.

Пример без БСП:

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

Пример с БСП:

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

Проектируйте роли с учетом влияния на командный интерфейс.

Если чтение/запись идет в #std485: привилегированном режиме, не задавайте в роли права с RLS-условием ГДЕ ЛОЖЬ. В таких случаях проверяйте наличие роли.

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

Неправильно

Добавлять в роль ДобавлениеИзменениеЗаметок фиктивные права на регистр Заметки с ГДЕ ЛОЖЬ и проверять:

Если ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.Заметки) Тогда

Правильно

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

Либо с БСП:

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

#bslls:IsInRoleMethod

#acc:336 #acc:341 #acc:393 #acc:394 #acc:395 #acc:457 #acc:460 #acc:461 #acc:514 #acc:515

Источник

https://its.1c.ru/db/v8std#content:737