Использование привилегированного режима
Область применения: управляемое приложение, обычное приложение.
1.1. Привилегированный режим позволяет
1.2. Привилегированный режим следует использовать
2. Далее приведем некоторые типовые сценарии использования привилегированного режима.
Например, в конфигурации имеются объекты метаданных:
Например, в случае если в конфигурации есть объекты метаданных
и необходимо, чтобы
2.4. Привилегированный режим также следует использовать с целью повышения производительности в тех случаях, когда это не приводит к выполнению действий или получению данных, не разрешенных пользователю.
Пример 1. Выполняется запрос, у которого значения параметров отбора уже прошли проверку ограничения прав на уровне записей. Тогда сам запрос допустимо выполнить в привилегированном режиме для повышения его производительности. Переход в привилегированный режим, например, при получении данных для отчета, следует тщательно рассчитывать, чтобы предотвратить получение данных, не разрешенных пользователю.
Пример 2. Параметр сеанса «Текущий пользователь» не доступен ни в одной роли. Для получения значения используется функция:
Функция ТекущийПользователь() Экспорт
УстановитьПривилегированныйРежим(Истина);
Возврат ПараметрыСеанса.ТекущийПользователь;
КонецФункции
3. В то же время, неоправданное использование привилегированного режима может привести к проблемам безопасности пользовательских данных.
3.1. Потенциально опасны любые экспортные процедуры и функции, которые выполняют на сервере какие-либо действия с предварительной безусловной установкой привилегированного режима, так как это отключает проверку прав доступа текущего пользователя. Особого внимания требуют экспортные процедуры и функции клиентского прикладного программного интерфейса сервера 1С:Предприятия.
Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт
УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа
// Изменяем данные в привилегированном режиме
.
Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт
// Изменяем данные
// (при этом если у пользователя недостаточно прав для выполнения операции над данными, то будет вызвано исключение)
.
Исключение составляют случаи, когда действие, выполняемое процедурой, должно быть разрешено (или возвращаемое значение функции должно быть доступно) абсолютно всем категориям пользователей.
3.2. В случаях, когда к экспортной процедуре или функции выполняется обращение в сеансе с недостаточным уровнем прав доступа, должно вызываться исключение стандартного вида (см. метод платформы ВыполнитьПроверкуПравДоступа ).
Как правило, для этого не требуется предусматривать в коде каких-либо проверок, так как при наличии в конфигурации ролей и ограничений доступа к данным на уровне записей (RLS) при попытке обращения к недоступным данным возникнет исключение:
Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт
ВыполнитьПроверкуПравДоступа(. ); // Если у пользователя недостаточно прав, то будет вызвано исключение
УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа
// Изменяем данные в привилегированном режиме
.
3.3. Включать привилегированный режим следует точечно, чтобы остальной код не терял возможности проверки прав пользователя.
Для этого нужно:
// Код подготовки запроса, которому требуется проверка прав
// Код выполнения запроса, для которого требуется отключить проверку прав
Выборка = Запрос.Выполнить().Выбрать();
// Обработка результатов запроса, где требуется проверка прав.
// Код подготовки запроса
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
// Обработка результатов запроса
4. Для перехода в привилегированный режим следует использовать следующие возможности платформы 1С:Предприятие :
УстановитьПривилегированныйРежим(Истина)
// фрагмент кода в привилегированном режиме
// …
УстановитьПривилегированныйРежим(Ложь)
Роли и права доступа в 1С 8.3
Права доступа
1С предоставляет возможность разграничения прав доступа пользователей. Права доступа настраиваются в объекте метаданных — Роль:
Если в окне редактирования роли выделить корневой узел конфигурации, то справа будет доступен список общих для всей конфигурации прав доступа:
Рассмотрим основные из них:
Права на прикладные объекты можно поделить на два типа:
Например, если для роли указать только четыре права на справочник:
То в интерфейсе пользователю с данной ролью справочник будет не доступен, но программно он сможет добавлять новые элементы, изменять существующие, удалять и читать уже имеющиеся.
Если добавить право на просмотр:
То справочник будет доступен, но только для просмотра:
Право редактирование позволит изменять существующие элементы, но в форме списка не будет кнопки добавления нового элемента:
Если добавить право Интерактивное добавление, то появится кнопка для создания нового элемента:
У справочника можно отдельно настроить права для предопределенных элементов:
Если у роли включить право на просмотр, то автоматически устанавливается право на чтение, потому что просмотр без чтения не возможен. Если включить право на редактирование, то автоматически включится право на изменение. Верно и обратное: если снять право на изменение, то автоматически выключится право на редактирование.
У каждого объекта можно отдельно настраивать права на подчиненные объекты:
Например, можно дать все права на документ, а для табличной части дать права только на просмотр:
В этом случае можно будет редактировать стандартные реквизиты документа, но табличная часть будет доступна только для просмотра:
Также стоит отметить, что если у пользователя есть права доступа на документ, но нет прав на справочник, значения которого используются в документе, то вместо значения справочников будет надпись «Объект не найден», как на картинке выше в реквизите Вид расчета.
Роли пользователя
После настройки прав доступа для роли ее можно назначить пользователю. Причем можно указать сразу несколько ролей. Состав ролей указывается в карточке пользователя на закладке Прочие:
Если хотя бы у одной роли есть права на объект, то у пользователя будет доступ к этому объекту. То есть сочетание прав разных ролей работает по условию «ИЛИ». Если ни в одной роли нет прав на объект, то у пользователя не будет доступа к этому объекту.
При создании новой роли автоматические устанавливаются следующие права на конфигурацию:
А также для всех существующих объектов метаданных устанавливаются права на подчиненные объекты:
При этом на сами объекты метаданных права сняты.
В результате достаточно дать права на объект, а права на подчиненные объекты уже установлены. При необходимости их можно снять.
Если для роли установлен флаг Устанавливать права для реквизитов и табличных частей по умолчанию, то при добавлении в конфигурацию нового объекта у роли автоматически будут проставлены права для его подчиненных объектов:
Если данный флаг снят, то при добавлении нового объекта в конфигурацию для его подчиненных объектов не будут установлены права. В этом случае при добавлении прав на этот объект, нужно не забыть дать права и на его подчиненные объекты.
Флаг Независимые права подчиненных объектов позволяет складывать права на объекты с правами подчиненных объектов из разных ролей.
Например, в одной роли настроены права на справочник, но нет прав на подчиненные объекты справочника (реквизиты, табличные части и т.п.). А в другой роли нет прав на справочник но зато есть права на подчиненные объекты справочника.
Если флаг Независимые права подчиненных объектов снят, то у пользователя с двумя этими ролями не будет прав на подчиненные объекты справочника. Права из второй роли не применились, потому что нет прав на справочник.
Если установить данный флаг в настройках второй роли, где заданы права на подчиненные объекты, то у пользователя будут права как на справочник, так и на подчиненные объекты. Права из второй роли на подчиненные объекты считаются независимыми и были сложены с правами из первой роли.
Если щелкнуть правой кнопкой по корню конфигурации или по узлу дерева Роли, то можно выбрать пункт меню Все роли:
В результате будет открыто окно, где слева представлены все объекты конфигурации, а справа список прав на выделенный объект и наличие права у той или иной роли:
Роль Полные права
Как правило в конфигурации создается роль Полные права, которая предоставляет полный доступ к конфигурации. Чтобы установить все права для роли нужно в окне редактирования роли в верхнем меню выбрать Действия — Установить все права:
А также внизу устанавливается флаг Устанавливать права для новых объектов:
Это значит, что при добавлении в конфигурацию новых объектов у данной роли автоматически будут назначаться полные права на него.
Если оставить так, то у пользователя с данной ролью будет возможность выполнить непосредственное удаление элемента справочника или документа:
В этом случае элемент справочника или документ будет удален без проверки ссылочной целостности. И если данный элемент был использован где-то, то на его месте будет надпись «Объект не найден»:
Контроль ссылочной целостности подразумевает удаление объектов в два этапа:
Контроль наличия ссылок и удаление помеченных выполняется через функции для технического специалиста — Стандартные — Удаление помеченных объектов:
Поэтому как правило во всех ролях для прикладных объектов снимаются такие права, как:
Основные роли
Если в базе нет ни одного пользователя, то считается, что нет ограничения прав доступа. В этом случае для ограничения прав можно использовать свойство конфигурации Основные роли:
В этом случае работа в пользовательском режиме будет выполняться с правами доступа, настроенными для отмеченных ролей.
Привилегированный режим
В привилегированном режиме не выполняется проверка прав доступа. Привилегированный режим можно включить только на сервере, на клиенте включение привилегированного режима игнорируется. Включается данный режим с помощью метода УстановитьПривилегированныйРежим. Если параметром передать Истина, то привилегированный режим будет включен. Если передать Ложь, то выключен:
Как настроить запуск отчета на СКД в привилегированом режиме?
(1) vkozak, надо отчет формировать программно.
КомпоновщикМакетаКомпоновкиДанных (DataCompositionTemplateComposer)
Выполнить (Execute)
Синтаксис:
Тип: СхемаКомпоновкиДанных.
Схема, для которой требуется построить макет.
(обязательный)
Тип: НастройкиКомпоновкиДанных.
Настройки, для которых необходимо создать макет.
(необязательный)
Тип: ДанныеРасшифровкиКомпоновкиДанных.
Содержит переменную, в которую будут помещены данные расшифровки. Если параметр не указан, расшифровка заполняться не будет.
(необязательный)
Тип: МакетОформленияКомпоновкиДанных.
Макет оформления, в соответствии с которым необходимо оформлять макет компоновки данных. Если не указан, будет использоваться макет оформления по умолчанию.
(необязательный)
Тип: Тип.
Указывает тип генератора макета компоновки данных.
Возможные типы:
ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений (DataCompositionValueCollectionTemplateGenerator);
ГенераторМакетаКомпоновкиДанных (DataCompositionTemplateGenerator)
.
Значение по умолчанию: Тип(«ГенераторМакетаКомпоновкиДанных»).
(необязательный)
Тип: Булево.
Определяет, выполнять ли проверку прав на просмотр полей и проверку доступности поля во включенных функциональных возможностях.
Значение по умолчанию: Истина.
(необязательный)
Тип: Структура.
Содержит параметры функциональных опций, используемые при исполнении отчета.
Возвращаемое значение:
Тип: МакетКомпоновкиДанных.
Созданный макет компоновки.
Описание:
Настройка права доступа 1С 8
В этой статье речь пойдет о настройке прав доступа пользователей к объектам системы 1С.
В 1С 8для управления доступа пользователей используется отдельный объект метаданных, который называется Роли.
Далее мы рассмотрим, как использовать и настраивать роли в 1С предприятие 8.3.
Обратите внимание! Эта статья написана в помощь программистам. Настройка прав в пользовательском режиме на примере 1С Бухгалтерия рассмотрена в данной статье.
Роль определяет набор прав пользователя, которые он имеет. Механизм ролей очень похож на механизмы прав Windows Active Directory. Для каждого из объектов (справочники, документы) разработчик устанавливает свой набор прав — чтение/запись/добавление/изменение/…
Набор доступных прав — совокупность всех разрешений в ролях пользователя.
Ниже мы рассмотрим подробно каждый атрибут метаданных при настройке роли пользователя 1С 8.3.
Общие настройки роли 1С
Если открыть объект метаданных Роль, мы можем увидеть следующую картину:
У объекта есть две закладки — Права и Шаблоны ограничений. Права — основная закладка, Шаблоны — вкладка для настройки прав на уровне записи в 1С (RLS). Это очень важная тема, её я постараюсь описать в будущих статьях.
Будем рассматривать только вкладку Права.
Следует обратить внимание на галочки в нижней части:
Настройки прав на всю конфигурацию
Если открыть Роль и кликнуть на корень конфигурации, мы увидим следующие настройки:
Подробнее о каждом из прав на всю конфигурацию:
Настройка прав 1С на другие объекты метаданных
Для остальных основных объектов (справочники, константы, документы, регистры…), набор прав у роли достаточно стандартен:
Права только для документов:
Только для регистров накопления и бухгалтерии
Только для обработок и отчетов:
Привилегированный режим 1С
Если Вы не хотите давать роли права на какие-либо действия, но эти метаданные нужно использовать в какой-то момент, можно воспользоваться методом «УстановитьПривилегированныйРежим()» (или использовать привилегированный режим общего модуля).
Все, что внутри, будет выполняться без проверки прав пользователя.
Доступна ли роль 1С пользователю?
Чтобы узнать, нужно выполнить функцию РольДоступна(), передав туда название роли строкой.
Например:
Нарушение прав доступа
Такую ошибку можно увидеть, если недостаточно прав на чтение/редактирование/удаление данных. Система выдаёт вот такую ошибку:
Чтобы исправить «нарушение прав доступа», необходимо понять, на какой объект пользователю не хватает прав, и добавить ему либо новую роль, либо в существующую роль добавить больше прав.
Объект не найден…
Ошибка, когда в полях отображается некое ( … ):
Как правило, специалисты думают, что это просто так называемая «битая ссылка». Но это не всегда так. Такая ошибка бывает и при неправильно настроенном механизме прав RLS. Это связано с тем, что у пользователя не хватает прав, чтобы получить представление ссылки.
Для того чтобы понять, битая ссылка или нет, просто зайдите в базу под пользователем с полными правами.
Для массового поиска таких ошибок подойдет статья как найти битые ссылки в базе 1С.
P.S. Если у Вас все же не получилось разобраться в ролях пользователей, Вы можете заказать услуги 1С программиста.
Видео с примером настройки прав в 1С бухгалтерии 3.0:
Другие статьи по 1С:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Программная работа с Ролями в 1С
Ограничение прав доступа в 1С
Роль — это объект метаданных, предназначенный для описания набора разрешенных действий (прав). Каждому пользователю прикладного решения может быть назначена одна или несколько ролей. Пользователь будет иметь право на объект, если хотя бы одна из назначенных ему ролей предоставляет право на этот объект. При попытке получить доступ к объекту, на который у пользователя нет прав, выдается ошибка:
В ролях можно управлять доступом не только на уровне объектов метаданных, но и на уровне объектов базы данных. Например, можно указать, что пользователю с определенной ролью разрешено изменять справочник Номенклатура, но только те его элементы, которые не помечены на удаление. Этот механизм называется RLS — Row Level Security (ограничение доступа на уровне записей).
Привилегированный режим работы
В системе есть возможность временно отключить проверку прав доступа. Такой режим называется привилегированным. В привилегированном режиме разрешены любые операции с базой и не производится контроль RLS.
Включение привилегированного режима осуществляется методом
Получить текущее значение привилегированного режима можно функцией
которая возвращает значение типа Булево.
Безопасный режим работы
В безопасном режиме:
Включение безопасного режима осуществляется методом
Получить текущее значение безопасного режима можно функцией
которая возвращает значение типа Булево.
Программная работа с Ролями
Для проверки доступности Роли текущему пользователю:
Для определения права доступа (чтение, изменение и т.д.) к объекту метаданных:
Для проверки прав доступа текущего пользователя на объект метаданных:
Процедура ВыполнитьПроверкуПравДоступа () отличается от функции ПравоДоступа () тем, что доступна только для текущего пользователя. При отсутствии права вызывается исключение, а в журнал регистрации пишется событие ОтказВДоступе.
Для получение информации о праве доступа на определенный объект метаданных для пользователя или роли с учетом указанных полей:
Для получения представления права по имени:
ПредставлениеПрава ( ИмяПрава >)
//Пример использования:
Представление = ПредставлениеПрава ( «ИнтерактивноеОткрытиеВнешнихОбработок» );
// Переменная Представление будет содержать строку «Интерактивное открытие внешних обработок»
Программная работа с Ролями в БСП
В типовых конфигурациях, построенных на Библиотеке стандартных подсистем, в общих модулях есть методы для работы с ролями. Вот некоторые из них:
В общих модулях у каждого метода есть подробное описание. Там можно посмотреть описание самого метода, входных параметров и возвращаемого значения.
Остались вопросы?
Спросите в комментариях к статье.