Настройка        08.03.2024   

1с текущий пользователь на клиенте. Как получить информацию о ролях конфигурации

5
Когда требуется более тонкая настройка доступа, на помощь приходит механизм RLS - Record Level Security. Конфигурации системы «1С:Предприятие» 8 изначально позиционировалась как программа для многофирменного учета, и один из... 3
Начиная с платформы 8.0 системы 1С Предприятие, существует возможность ограничивать права доступа пользователей на уровне записей. Для этого используется механизм RLS (Record Level Security). Такая «тонкая» настройка может быть... 3
Часто встречаю вопросы касаемые программного создания и настройки прав пользователей. В этот статье я приведу примеры для Обычного и Управляемого приложений, которые программно создают пользователя в... 2
Вопрос: У меня добавлен новый пользователь. Создаю новый интерфейс (копированием существующего) и указываю этот интерфейс в качестве основного для данного пользователя. Проблема в том, что созданный новый интерфейс...

  • АКТУАЛЬНЫЕ РЕЛИЗЫ 1С
  • ПРИМЕРЫ КОДА НА ПЛАТФОРМЕ 1С
Роли, права доступа в 1С 8.x
Как узнать, доступна ли определенная роль текущему пользователю?
Если Не РольДоступна("Менеджер") Тогда Сообщить("Просмотр заявок от покупателей не разрешен!"); КонецЕсли;
Как получить информацию о ролях конфигурации?
Функция СписокВозможныхРолейКонфигурации() СписокРолей = новый СписокЗначений; РолиКонфигурации = Метаданные.Роли; Для каждого Роль из РолиКонфигурации Цикл СписокРолей.Добавить(Роль.Имя); КонецЦикла; Возврат СписокРолей; КонецФункции
Как выполнить код без проверки прав?
1. Использовать привилегированный модуль 2. Размещение программного кода, который должен выполняться БЕЗ КОНТРОЛЯ ОГРАНИЧЕНИЙ, в общий модуль с установкой у модуля флага ПРИВИЛЕГИРОВАННЫЙ. Использовать привилегированный режим исполнения программного кода Аналогичный режиму работы кода привилегированных модулей. Режим можно включить/выключить средствами встроенного языка: УстановитьПривилегированныйРежим(<Включить>) Параметр <Включить> (обязательный) Тип: Булево. Определяет, будет ли включен привилегированный режим: Истина - включить режим; Ложь - выключить режим. функция ПривилегированныйРежим() позволяет определить, включен привилегированный режим, или нет. Использование привилегированного режима позволяет, во-первых, ускорить работу, так как не будут накладываться ограничения на доступ к данным, а во-вторых, позволяет выполнять операции с данными от лица пользователей, которым эти данные недоступны. Привилегированный режим рекомендуется использовать тогда, когда с логической точки зрения нужно отключить проверку прав, или когда можно отключить проверку прав, чтобы ускорить работу. Допустимо использовать привилегированный режим тогда, когда работа с данными от лица некоторого пользователя не нарушает установленные для этого пользователя права доступа.

Параметры сеансы 1С 8.3 — переменная, в которой хранится значение нужного параметра на время сеанса пользователя. По сути, это некая глобальная переменная, привязанная к сеансу текущего пользователя.

Использование параметров сеанса в 1С

Параметры сеанса задаются только программно, универсального интерфейса для установки параметров сеанса в системе нет. Обычно они задаются при старте системы, в «Модуле сеанса». Если параметр не определен, во время обращения к нему будет вызвана ошибка.

Пример установки параметра сеанса 1С

Рассмотрим типичный пример использования параметров сеанса — установку текущего пользователя. Пример я возьму из подготовки к .

В древе метаданных создадим новый параметр сеанса — ТекущийПользователь, назначим ему тип — СправочникСсылка.ФизическиеЛица:

Получите 267 видеоуроков по 1С бесплатно:

В модуле сеанса создадим процедуру, в которой будет определяться текущий параметр сеанса:

Код процедуры:

Процедура УстановкаПараметровСеанса(ТребуемыеПараметры) //ищем физ. лицо по имени пользователя ТекПользователь = Справочники. ФизическиеЛица. НайтиПоНаименованию(ИмяПользователя() ) ; //если не нашли - создадим нового Если ТекПользователь. Пустая() Тогда НовПользователь = Справочники. ФизическиеЛица. СоздатьЭлемент() ; НовПользователь. Наименование = ИмяПользователя() ; НовПользователь. Записать() ; ТекПользователь = НовПользователь. Ссылка; КонецЕсли ; //присваиваем параметру сеанса ТекущийПользователь ссылку на справочник физ.лиц ПараметрыСеанса. ТекущийПользователь = ТекПользователь; КонецПроцедуры

Рассматриваемы параметры в 1С:Предприятие представлены в виде объекта метаданных. По существу, это не что иное, как глобальная переменная, привязанная к текущему сеансу.

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

Поскольку параметр сеанса является объектом метаданных, он имеет определенные особенности:

  • Он может быть определенного типа. Разрешенные типы определяются платформой. Перечень их достаточно обширный, но даже если в данном списке нет нужного для вас, всегда можно сериализовать значение и хранить его в параметре в виде строки.
  • Права на него, как и на любой другой объект метаданных, можно ограничивать ролями (как на запись, так и на чтение). При этом существует особенность при использовании его в RLS, но об этом будет написано ниже.
  • Он имеет ограничение на объем помещаемых данных в сериализованном виде. Их объем не должен превышать 4 Гб.

Если тип параметра сеанса:

  • ФиксированныйМассив
  • ФиксированнаяКоллекция
  • ФиксированнаяСтруктура

Тогда значение элемента коллекции может быть Неопределено.

Основная область параметров – применение их значений в запросах RLS (ограничение доступа на уровне записей).

Например, нам нужно в запросе RLS установить условие по текущему пользователю. Для этого заводим параметр сеанса «ТекущийПользователь», из кода встроенного языка устанавливаем значение:

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

Таблица.Пользователь = &ТекущийПользователь

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

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


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

Рекомендовано использовать отложенную (ленивую) инициализацию, то есть инициализировать параметры сеанса по требованию, а не при старте системы, так как не все параметры сеанса требуются непосредственно при старте системы. Отложенная инициализация выполняется так:

Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) Если ИменаПараметровСеанса Неопределено Тогда Если ИмяПараметра = "ТекущийПользователь" Тогда ПараметрыСеанса.ТекущийПользователь = ; ИначеЕсли ИмяПараметра = " ТекущаяОрганизация" Тогда ПараметрыСеанса.ТекущаяОрганизация = ; // и т.д. КонецЕсли; КонецЕсли; КонецПроцедурызначение>значение>>

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