Obțineți utilizatorul actual al clientului 1s 8.3. Cum să obțineți informații despre rolurile de configurare

25.01.2021 Știri

  • VERSIUNI CURENTE 1C
  • EXEMPLE DE COD PE PLATFORMA 1C
Roluri, drepturi de acces în 1C 8.x
Cum știu dacă un anumit rol este disponibil pentru utilizatorul actual?
If Not RoleAvailable("Manager") Then Report("Vizualizarea cererilor de la clienți nu este permisă!"); endIf;
Cum obțin informații despre rolurile de configurare?
Funcție Lista de roluri posibileConfiguration() Listă de roluri = listă nouă de valori; RolesConfiguration = Metadate.Roles; Pentru fiecare rol din bucla RoleConfiguration RoleList.Add(Role.Name); EndCycle; returnListRole; EndFunction
Cum se execută codul fără a verifica permisiunile?
1. Folosiți un modul privilegiat 2. Plasarea codului de program care trebuie executat FĂRĂ CONTROLUL CONSTRĂNILOR într-un modul comun cu flag-ul PRIVILEGE setat pentru modul. Utilizați un mod privilegiat de execuție a codului de program Similar cu modul de funcționare a codului modulelor privilegiate. Modul poate fi activat/dezactivat folosind limbajul încorporat: SetPrivilegedMode(<Включить>) Parametru<Включить>(obligatoriu) Tip: boolean. Stabilește dacă modul privilegiat va fi activat: True - activați modul; Fals - dezactivați modul. Funcția PrivilegedMode() vă permite să determinați dacă modul privilegiat este activat sau nu. Utilizarea modului privilegiat permite, în primul rând, accelerarea activității, deoarece nu vor fi impuse restricții privind accesul la date, iar în al doilea rând, vă permite să efectuați operațiuni cu date în numele utilizatorilor cărora aceste date nu sunt disponibile. Modul privilegiat este recomandat atunci când trebuie logic să dezactivați verificarea permisiunilor sau când puteți dezactiva verificarea permisiunilor pentru a accelera lucrurile. Este acceptabilă utilizarea modului privilegiat atunci când lucrul cu date în numele unui anumit utilizator nu încalcă drepturile de acces stabilite pentru acest utilizator.

1C 8.3 parametrii de sesiune— o variabilă care stochează valoarea parametrului dorit pe durata sesiunii utilizator. În esență, acesta este un fel de variabilă globală legată de sesiunea utilizatorului curent.

Utilizarea parametrilor de sesiune în 1C

Parametrii de sesiune sunt setați doar programatic; nu există o interfață universală pentru setarea parametrilor de sesiune în sistem. Acestea sunt de obicei setate la pornirea sistemului, în „Modulul de sesiune”. Dacă un parametru nu este definit, la accesarea acestuia va apărea o eroare.

Exemplu de setare a unui parametru de sesiune 1C

Să ne uităm la un exemplu tipic de utilizare a parametrilor de sesiune - setarea utilizatorului curent. Voi lua un exemplu din pregătirea pentru.

În arborele de metadate, vom crea un nou parametru de sesiune - CurrentUser, îi vom atribui un tip - DirectoryLink.Individuals:

Obțineți 267 de lecții video pe 1C gratuit:

În modulul de sesiune, vom crea o procedură în care va fi determinat parametrul sesiunii curente:

Cod de procedură:

Procedura de setare a parametrilor sesiunii (parametri obligatorii) // în căutarea fizică persoană după numele de utilizator TechUser = Directoare. Persoanele fizice. FindByName(UserName()) ; //dacă nu este găsit, creați unul nou Dacă TechUser. Empty() Apoi NewUser = Directoare. Persoanele fizice. CreateItem() ; Utilizator nou. Nume = UserName() ; Utilizator nou. Scrie() ; CurrentUser = Utilizator nou. Legătură; EndIf ; //atribuiți parametrului de sesiune CurrentUser un link către directorul de persoane Parametrii sesiunii. CurrentUser = CurrentUser; Sfârșitul procedurii

5
Când este necesar un acces mai bine reglat, mecanismul RLS - Record Level Security vine în ajutor. Configurații de sistem „1C:Enterprise” 8 a fost poziționat inițial ca un program pentru contabilitate multi-societate și unul dintre... 3
Începând cu platforma 8.0 a sistemului 1C Enterprise, este posibil să se restricționeze drepturile de acces ale utilizatorilor la nivel de înregistrare. În acest scop, este utilizat mecanismul RLS (Record Level Security). O astfel de reglare „fină” poate fi... 3
Întâlnesc adesea întrebări referitoare la crearea de software și setarea drepturilor de utilizator. În acest articol voi da exemple pentru aplicații normale și gestionate care creează în mod programatic un utilizator în... 2
Întrebare: Am adăugat un utilizator nou. eu creez noua interfata(prin copierea uneia existente) și specificați această interfață ca fiind cea principală pentru acest utilizator. Problema este că noua interfață a creat...

Parametrii luați în considerare în 1C:Enterprise sunt prezentați ca obiect de metadate. În esență, nu este altceva decât o variabilă globală care este legată de sesiunea curentă.

O variabilă globală este aceeași variabilă ca oricare alta, dar particularitatea sa este că poate fi accesată de oriunde în program, iar în cazul unui parametru de sesiune, acesta funcționează doar în cadrul sesiunii curente.

Deoarece parametrul de sesiune este un obiect de metadate, are anumite caracteristici:

  • Poate fi de un anumit tip. Tipurile permise sunt determinate de platformă. Lista acestora este destul de extinsă, dar chiar dacă sunt incluse această listă nu este nevoie de tine, poți oricând să serializați valoarea și să o stocați într-un parametru ca șir.
  • Drepturile asupra acestuia, ca și pentru orice alt obiect de metadate, pot fi limitate de roluri (atât de scriere, cât și de citire). Cu toate acestea, există o particularitate atunci când îl utilizați în RLS, dar acest lucru va fi discutat mai jos.
  • Are o limită a cantității de date care pot fi plasate în formă serializată. Volumul lor nu trebuie să depășească 4 GB.

Dacă tipul de parametru de sesiune este:

  • FixedArray
  • FixedColelection
  • FixedStructure

Atunci valoarea elementului de colectare ar putea fi Nedefinit.

Zona principală a parametrilor este utilizarea valorilor acestora în interogările RLS (Record Level Access Restriction).

De exemplu, trebuie să setăm o condiție pentru utilizatorul curent în cererea RLS. Pentru a face acest lucru, setăm parametrul de sesiune „CurrentUser” și setăm valoarea din codul de limbă încorporat:

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

Table.User = &CurrentUser

Când utilizați parametrul de sesiune în acest fel, permisiunile de citire pentru parametru nu sunt luate în considerare, dar puteți încerca să obțineți valoarea lor din limbajul încorporat:

CurrentUser = SessionParameters.CurrentUser;


Puteți seta un parametru de sesiune, adică valoarea acestuia, numai în mod programatic și numai pe server. Pentru a face acest lucru, va trebui să apelați o procedură de server de la client. La accesarea unui parametru de sesiune (setare, recepție), dacă parametrul nu este inițializat, procedura va fi apelată SettingSessionParametersîn modulul de sesiune. Această procedură are un singur parametru Parametri necesari– o serie de identificatori de parametri setati de sesiune. SettingSessionParameters numită și la stabilirea unei conexiuni cu baza de informatiiînainte de a apela pe toți ceilalți operatori. În acest caz Parametri necesari va fi egal Nedefinit.

Se recomandă utilizarea inițializării întârziate (lene), adică inițializarea parametrilor de sesiune la cerere și nu la pornirea sistemului, deoarece nu toți parametrii de sesiune sunt necesari direct la pornirea sistemului. Inițializarea leneșă se face astfel:

Procedură SettingSessionParameters(SessionParametersNames) Dacă SessionParametersNames este nedefinit, atunci dacă ParameterName = "CurrentUser" Atunci SessionParameters.CurrentUser = ; ElseIf ParameterName = "CurrentOrganization" ThenSessionParameters.CurrentOrganization = ; // etc. endIf; endIf; EndProcedurevalue>valoare>>

Deoarece parametrul de sesiune este legat de sesiune, nu veți putea accesa parametrul de sesiune dintr-o metodă care rulează în fundal, deoarece va fi o sesiune diferită. Această nuanță poate fi o surpriză, așa că este mai bine să vă pregătiți în prealabil, trecând valoarea dorită ca parametru de metodă și inițialând-o din parametrul de sesiune la începutul procedurii.