1с установитьпривилегированныйрежим ошибка прав доступа

Нарушение прав в привилегированном режиме

Я

  

cmex

25.03.14 — 11:28

Доброго времени суток.

Вот кусок кода:

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

    УстановитьПривилегированныйРежим(Истина);

    

    Возврат ?(ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь),

              ПараметрыСеанса.ТекущийПользователь,

              ПараметрыСеанса.ТекущийВнешнийПользователь);

#Иначе

    Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().АвторизованныйПользователь;

#КонецЕсли

Захожу через отладчик под пользователем. Открываю внешнюю печатную форму. В данный кусок кода падает несколько раз и все проходит нормально, а перед открытием выдает «Нарушение прав доступа». Как такое возможно если стоит УстановитьПривилегированныйРежим(Истина)?

  

ДенисЧ

1 — 25.03.14 — 11:40

«В клиент-серверном варианте при выполнении на клиенте данный метод не выполняет никаких действий.

»

(с)

  

cmex

2 — 25.03.14 — 11:49

(1) точка останова срабатывает на сервере и позиционируется на  УстановитьПривилегированныйРежим(Истина)

  

shuhard

3 — 25.03.14 — 12:21

(0)[а перед открытием выдает «Нарушение прав доступа».]

ну и при чем здесь общий модуль ?

  

cmex

4 — 25.03.14 — 12:24

(3) имеется в виду не непосредственно перед открытием, а очередной вызов данной функции

  

cmex

5 — 25.03.14 — 12:25

(3) грубо говоря 10 раз вызывается, 9 норм, 10 не робит

  

cw014

6 — 25.03.14 — 12:32

Если в процедуре или функции вызовов метода с параметром Ложь сделано больше, чем вызовов с параметром Истина, то будет вызвано исключение.

Может это поможет?

  

Зойч

7 — 25.03.14 — 12:33

УстановитьПривилегированныйРежим(Истина) перед открытием не означает, что все что форма потянет неявно будет в привилегированном режиме, только тот код что далее следует

  

cmex

8 — 25.03.14 — 12:39

(6) кусок кода в начале это вся функция. никаких других вызовов метод этого нет.

  

Maxus43

9 — 25.03.14 — 12:40

общие модуля надо использовать с привелигированным режимом, в клиент-серверном варинате остальное — просто не красиво и не по понятиями

  

cmex

10 — 25.03.14 — 12:43

(9) типовая БП 3,0,30,16

  

cw014

11 — 25.03.14 — 12:43

Значит скорее всего срабатывает «Или ТолстыйКлиентОбычноеПриложение»

  

Maxus43

12 — 25.03.14 — 12:44

(10) ну передай в 1с, они быдлокодеры

  

VikingKosmo

13 — 25.03.14 — 12:45

(12) а то они в 1С не в курсе :)

  

cmex

14 — 25.03.14 — 12:47

может все таки я чего не допонимаю? сейчас через стек вызова гляну от куда чего и напишу

  

Maxus43

15 — 25.03.14 — 12:53

(14) читай (1) до просветления. Если отладчик встанет на эту строку — это не значит что что-то произойдёт

  

cmex

16 — 25.03.14 — 13:00

  

cmex

17 — 25.03.14 — 13:01

при нажатии F10 вылетает ошибка

  

Maxus43

18 — 25.03.14 — 13:14

(17) что от нас то хочешь? я чото не пойму…

  

cw014

19 — 25.03.14 — 13:15

(17) Говорит — «нарушение прав доступа». А журнал регистрации что говорит? Доступа к чему?

  

cmex

20 — 25.03.14 — 13:24

  

cmex

21 — 25.03.14 — 13:24

(18) как победить это?

  

Maxus43

22 — 25.03.14 — 13:26

попробуй дать права на справочник Пользователи.

А тип у ПараметрыСеанса.ТекущийВнешнийПользователь какой?

  

cmex

23 — 25.03.14 — 13:30

(22) есть права на справочники «Пользователи» и «ВнешниеПользователи», нет прав на ПараметрыСеанса, но ведь УстановитьПривилегированныйРежим(Истина) должны по идее всем все разрешить

  

cmex

24 — 25.03.14 — 13:31

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

  

Maxus43

25 — 25.03.14 — 13:31

(23) читай до просветления (1), сколько раз повторять? Контекст выполнения не тот, в итоге пшик вместо прав. На параметры сеанса давай права тоже, либо переписывай их получение

  

cmex

26 — 25.03.14 — 13:33

(25) то есть #Если Сервер Тогда не работает?

  

cmex

27 — 25.03.14 — 13:35

в общем не отработала «УстановитьПривилегированныйРежим(Истина)» ПривилегированныйРежим() = ложь пишет

  

Maxus43

28 — 25.03.14 — 13:37

хм… странно, обратил внимание таки на скрин с контекстом вызова, в СП про это нет. На файловом варианте должно работать кстати.

Ну таки склоняюсь к (9) всё равно, это быдлокод

  

cmex

29 — 25.03.14 — 13:45

решено

  

Maxus43

30 — 25.03.14 — 13:47

(29) что?

  

cmex

31 — 25.03.14 — 13:50

ПараметрыРегистрации.Вставить(«БезопасныйРежим», Истина) — в безопасном режиме не работает УстановитьПривилегированныйРежим()

Содержание

  1. Использование привилегированного режима
  2. ПривилегированныйРежим
  3. Привелигированный режим
  4. как установить УстановитьПривилегированныйРежим

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

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

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С:Предприятие :

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

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

Источник

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

Пожалуйста подскажите как решить мою проблему.
Делаю внешнюю печатную форму, в которой идет запрос к данным физ. лиц. У кадровика нет доступа к этим данным (физ. лицо). Но для печатной формы надо получить имя и пол (для склонения) и подстановки в печатную форму.
Внешнюю печатную обработку для отладки сделала с формой, открываю через «файл открыть».

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

Но не отключается безопасный режим и не включается соответственно привилегированный режим.

Как можно получить эти данные?

Ах спасибо ), примерно так я знала, что можно отлаживать.
Попробую щас.

Частично решила проблему с физ лицами. Создала новый профиль доступа и прописала кадровику только «чтение физ лиц». Это помогло! Но появились другие ошибки с доступом, как они меня задрали. С ними буду разбираться дальше.

Напишу еще что раскопала, может кому пригодится.

Я все таки включила привилегированный режим. Оказывается, его может включит только пользователь с правами «Администрирование зарплата кадры».

Если поставить кадровикам эту галку, то доступ к физ лицам можно отменить. Дело в том, что чтение физ лиц подразумевает и просмотр карточки физ лица. А это паспортные данные снилс и инн, что тоже плохо.


Сейчас разберусь какие права дает галка «Администрирование зарплата кадры» у профиля «Кадровик».

Короче, в данной задачи одно решение — дать доступ на чтение физ лиц. Привелигированный режим не подходит.

Дело в том, что нет стандартной роли в ERP только «чтение». Та роль, что я включила — «чтение физ лиц» идет с просмотром. И как ни крути, некоторые данные (снилс, инн, паспорт) кадровики могут видеть. Увы.

Если взять способ №2 и поставить привелигированный режим в моей обработке, то у меня все нормуль, но остальные документы встроенные в 1С не подставят фио руководителя (так как доступ к нему закрыт), если нет чтения физ лиц.

Если стоит задача четко не видеть данных закрытых физ лиц, то есть 2 варианта решения.

1. Делать роль в расширении, и давать право только «на чтение» без просмотра.

2. Есть справочник «Дополнительные значения». Туда можно напихать что душе угодно и тянуть оттуда. Даже склонения фио туда можно напихать и не парится :).

Глобальный минус 1С:ERP, что я не могу сделать «чтение» какого то справочника без просмотра.

(43) >Глобальный минус 1С:ERP, что я не могу сделать «чтение» какого то справочника без просмотра.

Что мешает создать в расширении роль где будет право Чтение но не будет права Просмотр?

Источник

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

могу кинуться копипастой из СП

Глобальный контекст (Global context)
УстановитьПривилегированныйРежим (SetPrivilegedMode)
Синтаксис:

Тип: Булево.
Определяет, будет ли включен привилегированный режим:
Истина — включить режим;
Ложь — выключить режим.

вызывать нужно НаСервере

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

При нажатии на кнопке в отчете вызывается такая процедура я дописал установка режима но 1с не видить моих процедур как быть?

Процедура КоманднаяПанельФормыЗаполнить(Кнопка)
УстановкаРежима();
Очистить();
ЗаполнитьАвто();
ОтменаРежима();

Пример обращение к параметру сеанса без контроля прав доступа из типовой конфы:

Весь код переносить не нужно.
Например (грубый пример), есть процедура СФОРМИРОВАТЬ(), вызывается из формы, обращается к данным с проверкой прав.

Процедура Сформировать()
ЭтотОбъект.ПроцОбращенияКДанным();
конецпроцедуры

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

Процедура ПроцОбращенияКДаннымБезПроверкиПрав(объект)
объект.ПроцОбращенияКДанным(); //вызвать из привилегированного модуля. Проверки прав не будет
конецпроцедуры

Тут нужно учитывать, используется ли клиент-серверный вариант (с ним свои заморочки)
Но, возможно в конкретном случае будет более уместно вызывать УстановитьПривилегированныйРежим(истина) (если файловый вариант, то париться с клиент-сервером не надо)

Источник

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

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

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

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

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

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

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

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

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

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

Источник

Содержание:

1.     Неверно настроены права в профиле пользователя 1С

В современных конфигурациях роли, созданные в конфигураторе, агрегируются в группы доступа, в которые, в свою очередь, добавляются пользователи. Права, при добавлении в пользователя в несколько групп, объединяются. Т.е. если хотя бы в одной из групп есть право на объект метаданных, то он будет доступен пользователю несмотря на то, что в других группах может быть указан явный запрет, например, на какой-либо элемент справочника организации в 1С и он все равно будет виден. Итак, для примера мы имеем пользователя, которому видны документы условной организации, кнопки провести записать и т.п. в документе доступны, но при попытке провести появляется ошибка «Недостаточно прав для работы с таблицей» с указанием таблицы.

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

Проверили роль есть или добавили, но ошибка все равно осталась. Дальше необходимо проверить настройки ограничений в группах. Разрешена ли запись по заданным реквизитам (Организация/Склад/Группа контрагентов/Группа номенклатуры и т.п.). У нас может быть группа в которой разрешено чтение всего и отдельно группа, разрешающая пользователю запись только по одной организации или складу. Находим группу, добавляем права на запись по необходимому реквизиту — проблема решена.  

2.     Попытка выполнения запроса пользователем, у которого установлены ограничения доступа на уровне записей 1С

В 99,9% такого типа ошибки возникают в доработанных конфигурациях системы 1С, в типовых такого рода ошибки исправляются в «первые дни» после выхода релиза. Считается ошибкой «новичка».

Разберем эту ошибку. Простой запрос:

«ВЫБРАТЬ

| Организации.НаименованиеПолное Как НаименованиеДляПечати

|ИЗ

| Справочник.Организации КАК Организации»

Под полноправным пользователем (а разработчики как правило «тестируют» под собой с полными правами) запрос выполнится без ошибок, а вот у пользователя с ограничением прав на уровне записей 1С появится описываемая ошибка. Главное правило (если действительно не нужно выбирать что-то запрещенное) в запросе использовать выражение «РАЗРЕШЕННЫЕ»

«ВЫБРАТЬ РАЗРЕШЕННЫЕ

| Организации.НаименованиеПолное КАК НаименованиеДляПечати

|ИЗ

| Справочник.Организации КАК Организации»

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

У нас два варианта:

●       Выполнить код в общем модуле с признаком Привилегированный режим в 1С

●       В коде перед получением и обработкой данных установить привилегированный режим в 1С УстановитьПривилегированныйРежим(Истина).

Однако нужно учитывать, что для любых внешних обработок/отчетов которые были открыты интерактивно (через «файл» — «открыть») в клиент-серверном варианте работы данная процедура будет ПРОИГНОРИРОВАНА!! Т.е. ошибка останется. Можно использовать подключаемые отчеты и обработки с отключённым безопасным режимом, об этом ниже.  

3.     Внешние обработки и печатные формы, подключенные к конфигурации системы 1С в безопасном режиме

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

ПараметрыРегистрации.Вставить(«БезопасныйРежим», Ложь)

При такой возможно использование привилегированного режима 1С в обработке/отчете.

Специалист компании «Кодерлайн»

Александр Логачев

На чтение 4 мин Просмотров 5.2к. Опубликовано 20.08.2019

Для ограничения доступа пользователей к данным в 1С используются Роли. В статье речь пойдет о программной работе с ними.

Содержание

  1. Ограничение прав доступа в 1С
  2. Привилегированный режим работы
  3. Безопасный режим работы
  4. Программная работа с Ролями
  5. Программная работа с Ролями в БСП

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

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

Окно ошибки при нарушении прав доступа в 1С

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

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

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

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

УстановитьПривилегированныйРежим(Истина);

отключение:

УстановитьПривилегированныйРежим(Ложь);

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

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

ПривилегированныйРежим()

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

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

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

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

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

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

УстановитьБезопасныйРежим(Истина);

отключение:

УстановитьБезопасныйРежим(Ложь);

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

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

БезопасныйРежим()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Нарушение прав в привилегированном режиме

Я
   cmex

25.03.14 — 11:28

Доброго времени суток.

Вот кусок кода:

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

    УстановитьПривилегированныйРежим(Истина);

    
    Возврат ?(ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь),

              ПараметрыСеанса.ТекущийПользователь,

              ПараметрыСеанса.ТекущийВнешнийПользователь);

#Иначе

    Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().АвторизованныйПользователь;

#КонецЕсли

Захожу через отладчик под пользователем. Открываю внешнюю печатную форму. В данный кусок кода падает несколько раз и все проходит нормально, а перед открытием выдает «Нарушение прав доступа». Как такое возможно если стоит УстановитьПривилегированныйРежим(Истина)?

   ДенисЧ

1 — 25.03.14 — 11:40

«В клиент-серверном варианте при выполнении на клиенте данный метод не выполняет никаких действий.

»

(с)

   cmex

2 — 25.03.14 — 11:49

(1) точка останова срабатывает на сервере и позиционируется на  УстановитьПривилегированныйРежим(Истина)

   shuhard

3 — 25.03.14 — 12:21

(0)[а перед открытием выдает «Нарушение прав доступа».]

ну и при чем здесь общий модуль ?

   cmex

4 — 25.03.14 — 12:24

(3) имеется в виду не непосредственно перед открытием, а очередной вызов данной функции

   cmex

5 — 25.03.14 — 12:25

(3) грубо говоря 10 раз вызывается, 9 норм, 10 не робит

   cw014

6 — 25.03.14 — 12:32

Если в процедуре или функции вызовов метода с параметром Ложь сделано больше, чем вызовов с параметром Истина, то будет вызвано исключение.

Может это поможет?

   Зойч

7 — 25.03.14 — 12:33

УстановитьПривилегированныйРежим(Истина) перед открытием не означает, что все что форма потянет неявно будет в привилегированном режиме, только тот код что далее следует

   cmex

8 — 25.03.14 — 12:39

(6) кусок кода в начале это вся функция. никаких других вызовов метод этого нет.

   Maxus43

9 — 25.03.14 — 12:40

общие модуля надо использовать с привелигированным режимом, в клиент-серверном варинате остальное — просто не красиво и не по понятиями

   cmex

10 — 25.03.14 — 12:43

(9) типовая БП 3,0,30,16

   cw014

11 — 25.03.14 — 12:43

Значит скорее всего срабатывает «Или ТолстыйКлиентОбычноеПриложение»

   Maxus43

12 — 25.03.14 — 12:44

(10) ну передай в 1с, они быдлокодеры

   VikingKosmo

13 — 25.03.14 — 12:45

(12) а то они в 1С не в курсе :)

   cmex

14 — 25.03.14 — 12:47

может все таки я чего не допонимаю? сейчас через стек вызова гляну от куда чего и напишу

   Maxus43

15 — 25.03.14 — 12:53

(14) читай (1) до просветления. Если отладчик встанет на эту строку — это не значит что что-то произойдёт

   cmex

16 — 25.03.14 — 13:00

   cmex

17 — 25.03.14 — 13:01

при нажатии F10 вылетает ошибка

   Maxus43

18 — 25.03.14 — 13:14

(17) что от нас то хочешь? я чото не пойму…

   cw014

19 — 25.03.14 — 13:15

(17) Говорит — «нарушение прав доступа». А журнал регистрации что говорит? Доступа к чему?

   cmex

20 — 25.03.14 — 13:24

   cmex

21 — 25.03.14 — 13:24

(18) как победить это?

   Maxus43

22 — 25.03.14 — 13:26

попробуй дать права на справочник Пользователи.

А тип у ПараметрыСеанса.ТекущийВнешнийПользователь какой?

   cmex

23 — 25.03.14 — 13:30

(22) есть права на справочники «Пользователи» и «ВнешниеПользователи», нет прав на ПараметрыСеанса, но ведь УстановитьПривилегированныйРежим(Истина) должны по идее всем все разрешить

   cmex

24 — 25.03.14 — 13:31

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

   Maxus43

25 — 25.03.14 — 13:31

(23) читай до просветления (1), сколько раз повторять? Контекст выполнения не тот, в итоге пшик вместо прав. На параметры сеанса давай права тоже, либо переписывай их получение

   cmex

26 — 25.03.14 — 13:33

(25) то есть #Если Сервер Тогда не работает?

   cmex

27 — 25.03.14 — 13:35

в общем не отработала «УстановитьПривилегированныйРежим(Истина)» ПривилегированныйРежим() = ложь пишет

   Maxus43

28 — 25.03.14 — 13:37

хм… странно, обратил внимание таки на скрин с контекстом вызова, в СП про это нет. На файловом варианте должно работать кстати.

Ну таки склоняюсь к (9) всё равно, это быдлокод

   cmex

29 — 25.03.14 — 13:45

решено

   Maxus43

30 — 25.03.14 — 13:47

(29) что?

  

cmex

31 — 25.03.14 — 13:50

ПараметрыРегистрации.Вставить(«БезопасныйРежим», Истина) — в безопасном режиме не работает УстановитьПривилегированныйРежим()

Содержание:

1.     Неверно настроены права в профиле пользователя 1С

В современных конфигурациях роли, созданные в конфигураторе, агрегируются в группы доступа, в которые, в свою очередь, добавляются пользователи. Права, при добавлении в пользователя в несколько групп, объединяются. Т.е. если хотя бы в одной из групп есть право на объект метаданных, то он будет доступен пользователю несмотря на то, что в других группах может быть указан явный запрет, например, на какой-либо элемент справочника организации в 1С и он все равно будет виден. Итак, для примера мы имеем пользователя, которому видны документы условной организации, кнопки провести записать и т.п. в документе доступны, но при попытке провести появляется ошибка «Недостаточно прав для работы с таблицей» с указанием таблицы.

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

Проверили роль есть или добавили, но ошибка все равно осталась. Дальше необходимо проверить настройки ограничений в группах. Разрешена ли запись по заданным реквизитам (Организация/Склад/Группа контрагентов/Группа номенклатуры и т.п.). У нас может быть группа в которой разрешено чтение всего и отдельно группа, разрешающая пользователю запись только по одной организации или складу. Находим группу, добавляем права на запись по необходимому реквизиту — проблема решена.  

2.     Попытка выполнения запроса пользователем, у которого установлены ограничения доступа на уровне записей 1С

В 99,9% такого типа ошибки возникают в доработанных конфигурациях системы 1С, в типовых такого рода ошибки исправляются в «первые дни» после выхода релиза. Считается ошибкой «новичка».

Разберем эту ошибку. Простой запрос:

«ВЫБРАТЬ

| Организации.НаименованиеПолное Как НаименованиеДляПечати

|ИЗ

| Справочник.Организации КАК Организации»

Под полноправным пользователем (а разработчики как правило «тестируют» под собой с полными правами) запрос выполнится без ошибок, а вот у пользователя с ограничением прав на уровне записей 1С появится описываемая ошибка. Главное правило (если действительно не нужно выбирать что-то запрещенное) в запросе использовать выражение «РАЗРЕШЕННЫЕ»

«ВЫБРАТЬ РАЗРЕШЕННЫЕ

| Организации.НаименованиеПолное КАК НаименованиеДляПечати

|ИЗ

| Справочник.Организации КАК Организации»

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

У нас два варианта:

●       Выполнить код в общем модуле с признаком Привилегированный режим в 1С

●       В коде перед получением и обработкой данных установить привилегированный режим в 1С УстановитьПривилегированныйРежим(Истина).

Однако нужно учитывать, что для любых внешних обработок/отчетов которые были открыты интерактивно (через «файл» — «открыть») в клиент-серверном варианте работы данная процедура будет ПРОИГНОРИРОВАНА!! Т.е. ошибка останется. Можно использовать подключаемые отчеты и обработки с отключённым безопасным режимом, об этом ниже.  

3.     Внешние обработки и печатные формы, подключенные к конфигурации системы 1С в безопасном режиме

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

ПараметрыРегистрации.Вставить(«БезопасныйРежим», Ложь)

При такой возможно использование привилегированного режима 1С в обработке/отчете.

Специалист компании «Кодерлайн»

Александр Логачев

  1. Добрый день.

    ИБ: УТ11.3 клиент-серверная
    При программной записи объекта происходит ошибка выполнения обработчика ПередЗаписью(): {ОбщийМодуль.ВерсионированиеОбъктов.Модуль(547)}

    Процедура ЗаписатьДанныеТекущейВерсии(Ссылка)
        Перем НомерПоследнейВерсии;
     
        УстановитьПривилегированныйРежим(Истина);
     
        Если Не ОбъектВерсионируется(Ссылка, НомерПоследнейВерсии) Тогда
            Возврат;
        КонецЕсли;
     
        ПоследняяВерсия = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи();
        ПоследняяВерсия.Объект = Ссылка;
        ПоследняяВерсия.НомерВерсии = НомерПоследнейВерсии;
        ПоследняяВерсия.Прочитать();
        Если Не ПоследняяВерсия.ЕстьДанныеВерсии Тогда
            ПоследняяВерсия.ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Ссылка), Новый СжатиеДанных(9));
            ПоследняяВерсия.Записать();
        КонецЕсли;
    КонецПроцедуры

    Ругается на строку «ПоследняяВерсия.Записать();». Но почему? Если запись происходит в привилегированном режиме! Получается, он не срабатывает? Но ведь при интерактивной записи объекта все работает! Запись происходит!
    Общий модуль «ВерсионированиеОбъектов» разумеется серверный.

    Вложения:

    • 2017-09-06_17-27-18.png

  2. TODD22

    Offline

    TODD22
    Профессионал в 1С
    Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    5.064
    Симпатии:
    185
    Баллы:
    104

    Проверь установлен у тебя привелегерованный режим?
    И попробуй переделать на общий модуль с включенным привелегерованным режимом.


  3. Dem0lisher

    Offline

    Dem0lisher
    Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.271
    Симпатии:
    106
    Баллы:
    104

    «Программная запись» — это случайно не из внешней обработки?

  4. Из внешней. Но

    ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
    

    — Объединение сообщений, 7 сен 2017

    В К-С варианте метод ПривилегированныйРежим() не работает, всегда возвращает Ложь.


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Перейти к содержимому

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

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

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

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

Пример с предварительной проверкой прав пользователя:

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

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

Правильно выполнено условие

Процедура ПодготовитьДанные()
	// Код подготовки запроса

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

	// Обработка результатов запроса
КонецПроцедуры

  • 1с торговля ошибка субд
  • 1с тонкий клиент ошибка http при обращении к серверу ошибка инициализации ssl соединения
  • 1с табличный документ записать xls ошибка доступа к файлу
  • 1с статус 53 эквайринг ошибка
  • 1с список зарегистрированных ошибок