Имя: Пароль:
1C
 
Привилегированный режим в общем модуле (управляемое приложение)
0 qwep
 
16.11.23
14:32
Добрый день!

Платформа: 8.3+
ИБ может быть как на сервере, так и в файловом варианте.

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

Перешел к реализации в управляемом приложении. Сделал все то же самое, но это не сработало, при проверке из общего модуля через ПривилегированныйРежим() возвращается Ложь. Функции вызываются с сервера. Пробовал принудительно установить привилегированный режим и отключить безопасный режим, без результатов. Подскажите, кто знает, пожалуйста, в чем подвох? Уверен, ларчик просто открывается.

Пример функции общего модуля, на которой в управляемом приложении ругается на отсутствие прав:
Функция ПолучитьПользователейИБПривилегированный() Экспорт
    Возврат ПользователиИнформационнойБазы.ПолучитьПользователей();
КонецФункции
1 MMB
 
16.11.23
14:40
Как именно пробовал принудительно установить привилегированный режим? Обычно просто перед кодом который должен быть выполнен в привилегированном режиме пишешь "УстановитьПривилегированныйРежим(Истина);". Привилегированный режим работает до конца текущего серверного вызова, если нужен привилегированный режим в нескольких разных серверных функциях, то в каждой нужно в начале устанавливать привилегированный режим. Ну и если это все во внешней обработке или расширении то небезопасный режим нужен. Точно отключал безопасный? Как именно?
2 asady
 
16.11.23
14:49
(0) толстый клиент видимо
3 qwep
 
16.11.23
14:51
Функция ПолучитьПользователейИБПривилегированный() Экспорт
    УстановитьБезопасныйРежим(Истина);
    УстановитьБезопасныйРежим(Ложь);
    УстановитьПривилегированныйРежим(Истина);
    Возврат ПользователиИнформационнойБазы.ПолучитьПользователей();
КонецФункции

Делал так, т.к. если не поставить безопасный режим, ругается с ошибкой "{CommonModule.ПривилегированныйQWEP.Module(4)}: Ошибка при вызове метода контекста (УстановитьБезопасныйРежим): В данной процедуре/ функции не был установлен безопасный режим"

Но после УстановитьПривилегированныйРежим(Истина); ПривилегированныйРежим() возвращает Ложь
4 qwep
 
16.11.23
14:52
(2) Платформа: 1С:Предприятие 8.3 (8.3.19.1150)
Конфигурация: Розница, редакция 2.3 (2.3.6.27) (http://v8.1c.ru/retail/)
Copyright © ООО "1С-Софт", 2009-2020. Все права защищены
(http://www.1c.ru)
Режим: Файловый (без сжатия)
Приложение: Тонкий клиент
Локализация: Информационная база: русский (Россия), Сеанс: русский
Вариант интерфейса: Такси
5 qwep
 
16.11.23
14:54
(1) сначала не понял, как реплай здесь делать, листинг выше привел
6 Смотрящий
 
16.11.23
14:55
Функция ПолучитьПользователейИБПривилегированный() Экспорт
    УстановитьПривелегированныйРежим(Истина);
    Возврат ПользователиИнформационнойБазы.ПолучитьПользователей();
КонецФункции
7 asady
 
16.11.23
14:59
(0)  Проверяй право "Администрирование" пользователя под которым запускаешь внешнюю обработку.
Если нет такого права, то обработка запускается в безопасном режиме.

В безопасном режиме не работает отключение контроля прав
8 qwep
 
16.11.23
14:59
(6) такая функция валится с ошибкой  {CommonModule.ПривилегированныйQWEP.Module(4)}: Ошибка при вызове метода контекста (ПолучитьПользователей): Пользователю недостаточно прав для выполнения операции.
9 qwep
 
16.11.23
15:02
(7) идея в том, что пользователь без административных прав должен иметь возможность получать список пользователей ИБ, читать и изменять их настройки, в обычном приложении с этим отлично справляется привилегированный общий модуль, а в управляемом чего-то не хватает
10 MMB
 
16.11.23
15:03
А саму обработку как запускаешь? Если например обработка подключена через БСП в безопасном режиме, то на сколько я помню код "УстановитьПривилегированныйРежим(Истина)" просто игнорируется и на сколько я понимаю то отключить кодом безопасный режим в этом случае тоже нельзя.
11 qwep
 
16.11.23
15:04
(10) файл > открыть
12 MMB
 
16.11.23
15:07
Вот тут в этих ваших интернетах что пишут:

Если по какой-то причине вы используете внешние файлы обработок/отчетов (через меню файл — открыть…), то наверняка столкнулись с проблемой невозможности выполнения элементарных операций записи данных. Помогут профили безопасности кластера сервера 1С.
      Дело в том что при использовании клиент-серверного варианта работы 1С внешние обработки/отчеты открываются в безопасном режиме, в котором запрещено использование привилегированного режима. А привилегированный режим используется очень часто в типовых конфигурациях: формирование печатных форм, различные служебные проверки (регистрация обменов) и т.д. В результате, даже используя обычный отчет на СКД без формы (по умолчанию используется общая форма «ФормаОтчета») и сохраняя пользовательские настройки отчета (в соответствующий справочник), вы получите ошибку о недостаточности прав доступа на различные константы и параметры сеанса, используемые в служебных целях после строки
УстановитьПривилегированныйРежим(Истина);
«Правильным» решением будет подключение внешних обработок и отчетов через механизмы БСП «Дополнительные отчеты и обработки» с отключением безопасного режима либо добавлением разрешений (по-моему, с версии БСП 2.2.2.1). Но если по каким-то причинам необходимо использование именно внешних файлов отчетов/обработок, то можно настроить профиль безопасности кластера, используемого в качестве профиля безопасности безопасного режима для конкретной информационной базы.
13 MMB
 
16.11.23
15:08
Может проще подключить через БСП в небезопасном режиме?
14 qwep
 
16.11.23
15:12
(13) так и придется делать, видимо, из БСП привилегированный режим включается, думал, я что-то не докопал, спасибо)
15 MMB
 
16.11.23
15:25
При подключении обработки через БСП в функции СведенияОВнешнейОбработке() нужно явно прописать что нужен небезопасный режим: РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);
Основная теорема систематики: Новые системы плодят новые проблемы.