#std485¶
Использование привилегированного режима¶
1.1.¶
Привилегированный режим позволяет:
- выполнять операции с данными от имени пользователей, которым эти данные напрямую недоступны;
- повышать производительность, так как при его использовании не применяются ограничения доступа к данным.
1.2.¶
Используйте привилегированный режим, когда:
- проверку прав нужно логически отключить для конкретной операции;
- проверку прав можно безопасно отключить для ускорения, не нарушая фактические права пользователя.
2.¶
Ниже приведены типовые сценарии использования привилегированного режима.
2.1.¶
Если подчиненные регистры (движения документов) нужны пользователю только для отчетов:
- оставляйте для них права только на чтение;
- запись выполняйте в привилегированном режиме.
Так проверка прав на запись требуется только для регистратора.
Пример
Есть объекты:
Документ.ОприходованиеТоваров;РегистрНакопления.ОстаткиНаСкладах;Отчет.ОстаткиНаСкладах.
Документ делает движения по регистру при проведении в привилегированном режиме. Пользователь формирует отчет по регистру, но не должен изменять регистр напрямую. Достаточно права чтения регистра.
2.2.¶
Если регистры не нужны пользователю ни в отчетах, ни в командном интерфейсе, не выдавайте права даже на чтение.
Чтение/запись в такие регистры выполняйте только в привилегированном режиме.
Пример
Регистр сведений ВерсииПодсистем используется только через служебные функции общего модуля.
Пользователям права на регистр не выдаются.
2.3.¶
Если для разрешенной операции требуются заранее недоступные пользователю данные, получайте эти данные в привилегированном режиме, но соблюдайте два ограничения:
- не передавайте такие данные на клиент;
- используйте их на сервере только в рамках запланированной операции.
Пример
Есть объекты:
Документ.РеализацияТоваровИУслуг;РегистрНакопления.Продажи;РегистрНакопления.Взаиморасчеты.
Требования:
- кладовщик проводит документ, который меняет регистр
Продажи, но сам регистр кладовщику недоступен; - при проведении выполняется проверка по
Взаиморасчеты, при этом доступ к регистру пользователю не открывается.
2.4.¶
Привилегированный режим можно использовать для повышения производительности, если это не открывает пользователю неразрешенные действия и данные.
Пример
Если параметры запроса уже проверены ограничениями прав на уровне записей, сам запрос можно выполнить в привилегированном режиме, но только после проверки, что результат не раскрывает лишние данные.
Пример
Параметр сеанса ТекущийПользователь не доступен в ролях,
поэтому он читается через привилегированный режим:
3.¶
Неоправданное использование привилегированного режима создает риски безопасности.
3.1.¶
Опасны экспортные серверные процедуры и функции, которые безусловно включают привилегированный режим: это отключает проверку прав текущего пользователя.
Особенно внимательно проверяйте экспортный API сервера (см. #std678).
Неправильно
Правильно
Исключение: действия (или значения), которые действительно должны быть доступны всем категориям пользователей.
3.2.¶
Если к экспортной процедуре/функции обращается пользователь с недостаточными правами,
должно возникать стандартное исключение
(см. ВыполнитьПроверкуПравДоступа()).
Чаще всего дополнительный код не нужен:
при корректно настроенных ролях и RLS исключение возникнет автоматически,
например:
- запрос без ключевого слова
РАЗРЕШЕННЫЕ; ПолучитьОбъект()по недоступной ссылке;- вызов недоступного метода глобального контекста.
Если нужна явная проверка, используйте ВыполнитьПроверкуПравДоступа().
Пример
См. также¶
- #std415: Ограничения на использование ключевого слова "РАЗРЕШЕННЫЕ" в запросах.
- #std499: Перехват исключений в коде.
3.3.¶
Включайте привилегированный режим точечно:
- включить прямо перед критическим действием;
- выполнить действие;
- сразу отключить;
- продолжить код в обычном режиме.
Неправильно
Правильно
4.¶
Для перехода в привилегированный режим используйте возможности платформы:
-
В обработчиках документа
ОбработкаПроведенияиОбработкаУдаленияПроведения:- через свойства документа
Привилегированный режим при проведениииПривилегированный режим при отмене проведения; - если состав выборки должен ограничиваться правами пользователя, эти свойства не используйте, а включайте режим точечно через
УстановитьПривилегированныйРежим().
- через свойства документа
-
Свойство бизнес-процесса
Привилегированный режим(для создания задач в привилегированном режиме). -
Свойство функциональной опции
Привилегированный режим при получении. -
Процедуру глобального контекста
УстановитьПривилегированныйРежим()в нужной точке кода: -
Общий модуль со свойством
Привилегированный.
См. также¶
- #std678: Безопасность прикладного программного интерфейса сервера
- #std488: Стандартные роли
- #std470: Использование функциональных опций