1c 8.3 отговорен настоящ потребител. Как да разберете дали дадена роля е достъпна за текущия потребител

Разглежданите параметри в 1C:Enterprise са представени като обект на метаданни. По същество това не е нищо повече от глобална променлива, обвързана с текущата сесия.

Глобалната променлива е същата променлива като всяка друга, но нейната особеност е, че може да бъде достъпна от всяка точка на програмата, а в случай на параметър на сесия, това работи само в рамките на текущата сесия.

Тъй като параметър на сесиятае обект на метаданни, има определени характеристики:

  • Може да е от определен вид.Разрешените типове са специфични за платформата. Списъкът с тях е доста обширен, но дори и този списък да не съдържа този, от който се нуждаете, винаги можете да сериализирате стойността и да я съхраните в параметъра като низ.
  • Правата върху него, както и върху всеки друг обект на метаданни, могат да бъдат ограничени чрез роли (както за писане, така и за четене). В същото време има една особеност при използването му в RLS, но това ще бъде обсъдено по-долу.
  • Има ограничение за количеството данни, поставени в сериализирана форма.Техният обем не трябва да надвишава 4 GB.

Ако тип параметър на сесията:

  • FixedArray
  • FixedCollection
  • Фиксирана структура

Тогава стойността на елемента на колекцията може да бъде Недефиниран.

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

Например, трябва да зададем условие за текущия потребител в RLS заявка. За да направите това, задаваме параметъра на сесията "CurrentUser", от кода на вградения език, задаваме стойността:

SessionParameters.CurrentUser =<значение>

Table.User = &CurrentUser

Използването на параметъра на сесията по този начин не взема предвид правата за четене на параметъра, но можете да опитате да получите тяхната стойност от вградения език:

CurrentUser = SessionParameters.CurrentUser;


Можете да зададете параметър на сесията, тоест неговата стойност, само програмно и само на сървъра. За да направите това, трябва да извикате сървърна процедура от клиента. При достъп до параметър на сесия (настройка, получаване), ако параметърът не е инициализиран, процедурата ще бъде извикана Настройка на параметрите на сесиятав сесийния модул. Тази процедура има един параметър Задължителни опции– масив от идентификатори на параметри на сесията, които трябва да бъдат зададени. Настройка на параметрите на сесиятасъщо се нарича, когато се установи връзка с информационна базапреди да се обадите на всички други манипулатори. В такъв случай Задължителни опциище бъде равно на Недефиниран.

Препоръчва се да се използва отложена (мързелива) инициализация, тоест инициализиране на параметрите на сесията при поискване, а не при стартиране на системата, тъй като не всички параметри на сесията се изискват директно при стартиране на системата. Мързеливата инициализация се извършва по следния начин:

Процедура SettingSessionParameters(SessionParameterNames) Ако SessionParameterNames е Undefined Then IfParameterName = "CurrentUser" Then SessionParameters.CurrentUser = ; ElseIf ParameterName = " CurrentOrganization" Then SessionParameters.CurrentOrganization = ; // и т.н. EndIf; EndIf; EndProcedurevalue>стойност>>

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

  • ТЕКУЩИ ИЗДАНИЯ 1C
  • ПРИМЕРИ ЗА КОД НА ПЛАТФОРМАТА 1C
Роли, права за достъп в 1C 8.x
Как мога да разбера дали определена роля е достъпна за текущия потребител?
If Not RoleAvailable("Manager") Then Report("Преглед на поръчки от купувачи не е разрешен!"); EndIf;
Как да получа информация за конфигурационните роли?
Функция Списък с възможни конфигурационни роли () Списък с роли = нов списък със стойности; ConfigRoles = Метаданни.Роли; За всяка роля от RoleConfiguration Loop ListRoles.Add(Role.Name); EndCycle; Връщане на списък с роли; Крайни функции
Как да изпълним код без проверка на правата?
1. Използвайте привилегирован модул 2. Поставяне програмен код, който трябва да се изпълнява БЕЗ ОГРАНИЧИТЕЛЕН КОНТРОЛ, в общ модул с флаг PRIVILEGE, зададен за модула. Използване на привилегирован режим на изпълнение на програмния код Подобен на режима на работа на кода на привилегированите модули. Режимът може да се активира/деактивира с помощта на вградения език: SetPrivilegedMode(<Включить>) Параметър<Включить>(задължително) Тип: Boolean. Определя дали привилегированият режим ще бъде активиран: True - активиране на режима; False - изключете режима. функцията PrivilegedMode() ви позволява да определите дали привилегированият режим е активиран или не. Използването на привилегирован режим позволява, първо, да ускори работата, тъй като няма да има ограничения за достъп до данни, и второ, ви позволява да извършвате операции с данни от името на потребители, за които тези данни не са достъпни. Привилегированият режим се препоръчва, когато е логично необходимо да изключите проверките на разрешенията или когато можете да изключите проверките на разрешенията, за да ускорите нещата. Допустимо е използването на привилегирован режим, когато работата с данни от името на определен потребител не нарушава правата за достъп, зададени за този потребител.

Параметри на сесията 1C 8.3- променлива, която съхранява стойността желан параметърза продължителността на потребителската сесия. Всъщност това е един вид глобална променлива, свързана със сесията на текущия потребител.

Използване на параметри на сесията в 1C

Параметрите на сесията се задават само програмно, няма универсален интерфейс за настройка на параметрите на сесията в системата. Обикновено те се задават при стартиране на системата, в "Модул сесия". Ако параметърът не е дефиниран, ще се появи грешка при достъпа до него.

Пример за настройка на параметъра на сесията 1C

Нека да разгледаме типичен случай на използване на параметрите на сесията - настройка на текущия потребител. Ще взема пример от подготовката за .

В дървото с метаданни нека създадем нов параметър на сесията - CurrentUser, задайте му тип - DirectoryReference.Individuals:

Вземете 267 1C видео урока безплатно:

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

Код на процедурата:

Процедура SettingSessionParameters(RequiredParameters) //търсим физически. лице по потребителско име CurrentUser = Директории. Физически лица. FindByName(UserName() ) ; // ако не бъде намерен, създайте новАко CurrentUser. Empty() Тогава NewUser = Директории. Физически лица. CreateElement() ; Нов потребител. Име = Потребителско име(); Нов потребител. Write() ; Текущ потребител = нов потребител. връзка; EndIf ; //присвояване на параметъра на сесията CurrentUser на връзка към директорията на лицатаПараметри на сесията. CurrentUser = Текущ потребител; EndProcedure

Зареждане...
Връх