Меню Закрыть

1С включить привилегированный режим

Содержание

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

1.1. Привилегированный режим позволяет

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

1.2. Привилегированный режим следует использовать

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

2. Далее приведем некоторые типовые сценарии использования привилегированного режима.

2.1. Если подчиненные регистры (движения документов) требуются пользователю для получения отчетов , то такие регистры следует оставлять доступными только для чтения, а запись в такие регистры следует выполнять переходом в привилегированный режим. При таком подходе, проверка прав на запись выполняется только для регистратора.

Например, в конфигурации имеются объекты метаданных:

  • Документ.ОприходованиеТоваров
  • РегистрНакопления.ОстаткиНаСкладах
  • Отчет.ОстаткиНаСкладах.

Документ ОприходованиеТоваров делает движения по регистру накопления ОстаткиНаСкладах при проведении в привилегированном режиме. Пользователю не требуется напрямую изменять регистр, но требуется формировать отчет ОстаткиНаСкладах , который читает данные регистра. Поэтому пользователю достаточно дать только право чтения регистра.

2.2. Если регистры не требуются пользователю ни для получения отчетов, ни в командном интерфейсе , то следует не давать пользователю права на их чтение. Чтение или запись данных в такие регистры выполняется переходом в привилегированный режим.

Например, в конфигурации имеется регистр сведений ВерсииПодсистем , данные которого не выводятся в отчетах, а доступ к нему осуществляется только через специальные функции общего модуля. В этом случае следует не давать пользователям какие-либо права доступа к регистру.

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

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

  • Документ.РеализацияТоваровИУслуг
  • РегистрНакопления.Продажи
  • РегистрНакопления.Взаиморасчеты

и необходимо, чтобы

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

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

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

Читайте также:  Появляется окно c windows system32 cmd exe

Пример 2. Параметр сеанса "Текущий пользователь" не доступен ни в одной роли. Для получения значения используется функция:

Функция ТекущийПользователь() Экспорт
УстановитьПривилегированныйРежим(Истина);
Возврат ПараметрыСеанса.ТекущийПользователь;
КонецФункции

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

3.1. Потенциально опасны любые экспортные процедуры и функции, которые выполняют на сервере какие-либо действия с предварительной безусловной установкой привилегированного режима, так как это отключает проверку прав доступа текущего пользователя. Особого внимания требуют экспортные процедуры и функции клиентского прикладного программного интерфейса сервера 1С:Предприятия.

Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт

УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа
// Изменяем данные в привилегированном режиме
.

Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт

// Изменяем данные
// (при этом если у пользователя недостаточно прав для выполнения операции над данными, то будет вызвано исключение)
.

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

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

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

  • при выполнении запроса без ключевого слова РАЗРЕШЕННЫЕ ;
  • при вызове метода ПолучитьОбъект «от» недоступной ссылки на объект;
  • при вызове недоступного метода глобального контекста;
  • и в других аналогичных случаях.

При необходимости выполнить проверку прав доступа вручную, следует использовать метод ВыполнитьПроверкуПравДоступа .
Пример предварительной проверки перед выполнением действий в привилегированном режиме:

Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт

ВыполнитьПроверкуПравДоступа(. ); // Если у пользователя недостаточно прав, то будет вызвано исключение
УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа

// Изменяем данные в привилегированном режиме
.

3.3. Включать привилегированный режим следует точечно, чтобы остальной код не терял возможности проверки прав пользователя.
Для этого нужно:

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

// Код подготовки запроса, которому требуется проверка прав

// Код выполнения запроса, для которого требуется отключить проверку прав
Выборка = Запрос.Выполнить().Выбрать();

// Обработка результатов запроса, где требуется проверка прав.

// Код подготовки запроса

Читайте также:  Как вытащить иконку на рабочий стол

УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);

// Обработка результатов запроса

4. Для перехода в привилегированный режим следует использовать следующие возможности платформы 1С:Предприятие :

    При реализации логики проведения и отмены проведения документов в обработчиках модуля документа ОбработкаПроведения и ОбработкаУдаленияПроведения :

    УстановитьПривилегированныйРежим(Истина)
    // фрагмент кода в привилегированном режиме
    // …
    УстановитьПривилегированныйРежим(Ложь)

    — Использовать привилегированный модуль
    Размещение программного кода, который должен выполняться БЕЗ КОНТРОЛЯ ОГРАНИЧЕНИЙ, в общий модуль с установкой у модуля флага ПРИВИЛЕГИРОВАННЫЙ.
    — Использовать привилегированный режим исполнения программного кода

    Аналогичный режиму работы кода привилегированных модулей. Режим можно включить/выключить средствами встроенного языка:
    Код 1C v 8.х
    Параметр (обязательный)
    Тип: Булево. Определяет, будет ли включен привилегированный режим:
    Истина — включить режим;
    Ложь — выключить режим.

    Функция:
    Код 1C v 8.х
    позволяет определить, включен привилегированный режим, или нет.

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

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

    Ограничение прав доступа в 1С

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

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

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

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

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

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

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

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

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

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

    Читайте также:  Как почистить ноутбук toshiba satellite

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Остались вопросы?
    Спросите в комментариях к статье.

    Рекомендуем к прочтению

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

    Ваш адрес email не будет опубликован.