Меню Рубрики

Установка привилегированного режима во внешней обработке

Использование привилегированного режима

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

источник

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

Метод УстановитьПривилегированныйРежим

Для управления привилегированным режимом предназначен метод глобального контекста УстановитьПривилегированныйРежим() , который позволяет включать или выключать привилегированный режим.
ВНИМАНИЕ! В клиент-серверном варианте вызов метода не оказывает влияния при работе на стороне клиента.
По умолчанию привилегированный режим выключен.
Количество включений привилегированного режима должно совпадать с количеством выключений. Однако если внутри процедуры или функции происходило включение привилегированного режима (один раз или более), но не происходило его выключение, то система автоматически выполнит выключение столько раз, сколько незавершенных включений было в покидаемой процедуре или функции
Если в процедуре или функции вызовов метода УстановитьПривилегированныйРежим ( Ложь ) сделано больше, чем вызовов метода УстановитьПривилегированныйРежим ( Истина ), то будет вызвано исключение.

Функция ПривилегированныйРежим()

Функция ПривилегированныйРежим() возвращает Истина , если привилегированный режим еще включен, и Ложь, если он полностью выключен. При этом не анализируется количество установок привилегированного режима в конкретной функции.
Программная установка привилегированного режима может потребоваться в случае массированных операций с данными информационной базы, и при этом нет смысла проверять права доступа к данным. Например, существует пользователь, которому доверили выполнять пересчет цен товаров. Тогда в обработке, например, которая это выполняет, можно проверить право текущего пользователя выполнять данную обработку, а затем включить привилегированный режим и выполнить все необходимые операции с базой данных. При этом у пользователя может не быть прав на чтение цен. Но так
как данная обработка не выдает пользователю самих цен, а только их пересчитывает, то поставленные задачи ограничения доступа будут также решены.
Также существует возможность стартовать привилегированный сеанс. Это сеанс, в котором привилегированный режим установлен с самого начала работы системы. При этом во время работы метод ПривилегированныйРежим() будет всегда возвращать Истина, а возможность отключить привилегированный режим не поддерживается. Стартовать привилегированный сеанс может только пользователь, которому доступны административные права (право Администрирование). Запуск сеанса можно выполнить с помощью ключа командной строки запуска клиентского приложения UsePrivilegedMode или параметра строки соединения с информационной базой prmod .

источник

АйТиБложик

Маленький IT блог с характером 1С.

Страницы

Поиск по блогу

воскресенье, 9 октября 2016 г.

Программное открытие внешней обработки. Безопасный режим.

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

Запуск внешней обработки в режиме обычного приложения

В обычном приложении необходимо использовать метод Создать() объекта ВнешниеОбработки, в который передается полное имя файла внешней обработки. Метод возвращает объект типа ВнешняяОбработка, этот объект и есть открываемая внешняя обработка. Если требуется открыть форму внешней обработки, то у полученного объекта вызываем метод ПолучитьФорму(), который вернет основную форму, а затем вызываем метод Открыть() для её открытия.

ПолноеИмяФайла = «»; // Полное имя файла внешней обработки.
Обработка = ВнешниеОбработки.Создать(ПолноеИмяФайла);
Обработка.ПолучитьФорму().Открыть();

Во внешних обработках основной формой всегда должна быть обычная, а управляемая дополнительной, иначе не будет работать метод ПолучитьФорму() в режиме обычном приложения.

Запуск внешней обработки в режиме управляемого приложения

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

&НаКлиенте
ПолноеИмяФайла = «»; // Полное имя файла внешней обработки.
ДанныеФайла = Новый ДвоичныеДанные(ПолноеИмяФайла);
ИмяВнешнейОбработки = ПолучитьИмяВнешнейОбработки(ДанныеФайла);
ОткрытьФорму(«ВнешняяОбработка.» + ИмяВнешнейОбработки + «.Форма»);

Безопасный режим для внешних обработок

Методы Создать() и Подключить() объекта ВнешниеОбработки имеют входящий параметр БезопасныйРежим — признак подключения внешней обработки в безопасном режиме. Если параметр не указан, подключение будет осуществлено в безопасном режиме.
Безопасный режим работы предназначен для защиты системы от выполнения на сервере «ненадежного» программного кода. Потенциальную опасность представляют внешние обработки или программный код, вводимый пользователем для использования в методах Выполнить() и Вычислить().
В безопасном режиме накладываются следующие ограничения:

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

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

Рисунок 1. Права интерактивного открытия внешних обработок/отчетов

Право «Интерактивное открытие внешних обработок» никак не влияет на объект ВнешниеОбработки.

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

источник

как установить УстановитьПривилегированныйРежим

Подскажите пожалуйста
есть отчет, с компонировокой данных, в котором есть такой запрос :
ВЫБРАТЬ
ХозрасчетныйОбороты.Счет,
ХозрасчетныйОбороты.Период,
ХозрасчетныйОбороты.Субконто1,
ХозрасчетныйОбороты.Субконто2,
ХозрасчетныйОбороты.Субконто3,
ХозрасчетныйОбороты.КорСчет,
ХозрасчетныйОбороты.КорСубконто1,
ХозрасчетныйОбороты.КорСубконто2,
ХозрасчетныйОбороты.КорСубконто3,
ХозрасчетныйОбороты.Организация,
ХозрасчетныйОбороты.Валюта,
ХозрасчетныйОбороты.ВалютаКор,
ХозрасчетныйОбороты.СуммаОборот,
ХозрасчетныйОбороты.СуммаОборотДт,
ХозрасчетныйОбороты.СуммаОборотКт,
ХозрасчетныйОбороты.ВалютнаяСуммаОборот,
ХозрасчетныйОбороты.ВалютнаяСуммаОборотДт,
ХозрасчетныйОбороты.ВалютнаяСуммаОборотКт,
ХозрасчетныйОбороты.ВалютнаяСуммаКорОборот,
ХозрасчетныйОбороты.ВалютнаяСуммаКорОборотДт,
ХозрасчетныйОбороты.ВалютнаяСуммаКорОборотКт,
ХозрасчетныйОбороты.КоличествоОборот,
ХозрасчетныйОбороты.КоличествоОборотДт,
ХозрасчетныйОбороты.КоличествоОборотКт,
ХозрасчетныйОбороты.КоличествоКорОборот,
ХозрасчетныйОбороты.КоличествоКорОборотДт,
ХозрасчетныйОбороты.КоличествоКорОборотКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(,,Месяц) КАК ХозрасчетныйОбороты

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

Создать управляемую форму и вызывать требуюмую функциональность на стороне сервера в серверной процедуре

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

всё равно данный режим не установить.

Уточняющий вопрос вам
а чём заключается ограниченный набор прав вашего пользователя
имеет ли он доступ на просмотр регистра бух-рии

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

Поэтому
1. что вам нужно сделать это определиться с правами
если вы хотите, чтобы юзер вообще данные не видел, доступ на чтение и просмотр, все равно предоставьте, единственное, на
чтение настройте RLS
как я привел на скрине 1. (предоставление доступа позволить СКД заполнить настройки формирования отчёта)

2. Формирование, отчёт СКД, мне видется единственный вариант, это сделать программно, в этом режиме мы можем перед выполнением
стандртного кода установить привегилерованный режим

источник

Привилегированный режим во внешнем соединении

(3) как определили, что не переходит в привилегированный режим?
Общий модуль с флагом Сервер и Привилегированный.
Все данные без проверки прав получать в нем.
Проверять не свойство Привилегированный, а получение данных.

PS. Модуль только Сервер, без ВнешнееСоединения

(5) НЕ РАБОТАЕТ. ВООБЩЕ. ПривилегированныйРежим() ВСЕГДА ВОЗВРАЩАЕТ ЛОЖЬ. ДАННЫЕ НЕ ПОЛУЧАЮТСЯ, В ЖУРНАЛ НИЧЕГО НЕ ПОПАДАЕТ.

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

зы2 Модуль только Сервер, без ВнешнееСоединения — не смешно

(6) еще раз внимательно прочитайте (5).
Именно так все работает.

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

(16) Документ, описывающий заявленное Вами поведение. (ересь etc)

Вкурите уже суть вопроса, писатель ;)) — не выполняется переход в прив.режим во всём сеансе, пофиг на флаги доступности модулей, например из того же ВнешнегоСоединения вызывается ВызовСервера из которого чистый Сервер. Серверный модуль тоже не сможет установить прив.режим. Он исполняется на клиенте ? нюню, нюню

Остальные знания ищите сами.

Если нет знаний, но утверждать, что это ересь. как минимум не уважительно. Если так утверждаете, то давайте и объяснение.

(4) Было бы здорово увидеть фрагмент кода.

Напишите код, что он возвращает?
COMCоединение.УстановитьПривилегированныйРежим(Истина);
Сообщить(COMCоединение.ПривилегированныйРежим());

Через ComСоединение не создать привилегированный режим.
Для решения:

Первый вариант:
Попробуйте в базе создать внешнюю обработку. Там прописать код, который Вам нужен с признаком установки привилегированного режима.
А через COMСоединение вызывать эту внешнюю обработку.

Второй вариант:
Создать регламентное задание, которое будет выполнять Ваш код или Ваше действие на основе анализа записей какого-нибудь Регистра сведений.
Через COMСоединение заполнять данные регистра сведений.

(10) в документации не нашел, 8.3.11 — та же проблема. Но мне помог параметр prmod в строке соединения:

если так указать, то работает

(13) Супер. Я так тоже умею — даёшь роль ПолныеПрава и вуаля, никаких проблем !

зы ОрловАВ, говоришь, . знакомое фамилие.

Причем здесь роль ПолныеПрава вообще.

Задан вопрос: как включить ПривилегированныйРежим — отвечаю —

«Для включения привилегированного сеанса используются: ключ UsePrivilegedMode командной строки запуска клиентского приложения (включая веб-клиент), параметр prmod=1 строки соединения.»

следующий код
COMCоединение.УстановитьПривилегированныйРежим(Истина);
Сообщить(COMCоединение.ПривилегированныйРежим());

(26) Задача стояла — подключить пользователя с ОГРАНИЧЕННЫМИ правами, а этот ключ из любого пользователя делает полноправного и всё, никакой магии.

зы ОрловАВ откуда у вас ? а то у меня прямо напротив один такой сидит 😉 Можно в личку если что, интересно очень.

На всякий случай имеет смысл пройти отладчиком, что происходит с 1С-кой в момент установки соединения. Отрабатывает ли код из общих модулей при установке соединения или записи документа, который не даёт установить привилегированный режим? Может быть, принудительно стоит в коде самой конфигурации невозможность установки привилегированного режима для внешнего соединения? Тогда тут документация для платформы не поможет.

источник

Читайте также:  Установка комплектующие для винилового сайдинга

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

Adblock
detector