Вземете клиента на текущия потребител 1s 8.3. Как да получите информация за конфигурационните роли

25.01.2021 Новини

  • ТЕКУЩИ ИЗДАНИЯ 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

5
Когато е необходим по-прецизен контрол на достъпа, на помощ идва механизмът RLS - Record Level Security. 1C:Enterprise System Configurations 8 първоначално беше позиционирана като програма за многофирмено счетоводство и една от... 3
Започвайки от платформа 8.0 на системата 1C Enterprise, е възможно да се ограничат правата за достъп на потребителите на ниво запис. За целта се използва механизмът RLS (Record Level Security). Такава "фина" настройка може да бъде... 3
Често срещам въпроси, свързани с програмното създаване и настройването на потребителски права. В тази статия ще предоставя примери за стандартни и управлявани приложения, които програмно създават потребител в ... 2
Въпрос: Добавих нов потребител. аз създавам нов интерфейс(като копирате съществуващ) и посочете този интерфейс като основен за този потребител. Проблемът е, че новосъздаденият интерфейс...

Разглежданите параметри в 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>стойност>>

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