internetul Windows Android

1c 8.3 obțineți utilizatorul actual pe client. Cum să aflați dacă un anumit rol este disponibil pentru utilizatorul actual

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

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

În măsura în care parametru de sesiune este un obiect de metadate, are anumite caracteristici:

  • Poate fi de un anumit tip. Tipurile permise sunt specifice platformei. Lista lor este destul de extinsă, dar chiar dacă este în această listă nu este nimeni de care aveți nevoie, puteți oricând să serializați valoarea și să o stocați în parametru ca un șir.
  • Drepturile asupra acestuia, ca și asupra oricărui alt obiect de metadate, pot fi limitate la roluri (atât pentru scriere, cât și pentru citire). În același timp, există o particularitate atunci când îl utilizați în RLS, dar acest lucru va fi descris mai jos.
  • Are o limită a cantității de date serializate care pot fi plasate. Volumul lor nu trebuie să depășească 4 GB.

Dacă tipul parametrului de sesiune este:

  • FixedArray
  • FixedCollection
  • Structură fixă

Apoi, valoarea articolului de colecție poate fi Nedefinit.

Scopul principal al parametrilor este aplicarea valorilor acestora în cererile RLS (restricție de acces la nivel de înregistrare).

De exemplu, trebuie să setăm o condiție pentru utilizatorul curent într-o cerere RLS. Pentru aceasta, setați parametrul de sesiune "CurrentUser", setați valoarea din codul de limbă încorporat:

Session Parameters.CurrentUser =<значение>

Table.User = & CurrentUser

Această utilizare a parametrului de sesiune nu ia în considerare permisiunile de citire ale parametrului, dar puteți încerca să obțineți valoarea lor din limba încorporată:

CurrentUser = SessionParameters.CurrentUser;


Parametrul de sesiune, adică valoarea sa, poate fi setat numai programatic și numai pe server. Pentru a face acest lucru, trebuie să apelați procedura serverului de la client. Când accesați un parametru de sesiune (set, get), dacă parametrul nu este inițializat, procedura va fi apelată SettingSessionParametersîn modulul de sesiune. Această procedură are un parametru Parametrii necesari- o serie de identificatori stabiliți ai parametrilor sesiunii. SettingSessionParameters numit și atunci când se stabilește o conexiune cu baza de informațiiînainte de a apela pe toți ceilalți manipulatori. În acest caz Parametrii necesari va fi egal Nedefinit.

Se recomandă utilizarea inițializării amânate (leneșe), adică pentru a inițializa parametrii sesiunii la cerere și nu la pornirea sistemului, deoarece nu toți parametrii sesiunii sunt necesari direct la pornirea sistemului. Inițializarea leneșă se face astfel:

Procedură SettingSessionParameters (SessionParameterNames) Dacă SessionParameterNames sunt nedefinite, atunci dacă ParameterName = "CurrentUser", apoi SessionParameters.CurrentUser =; OtherwiseIf ParameterName = "CurrentOrganization" Apoi SessionParameters.CurrentOrganization =; // etc. EndIf; EndIf; EndProcedure value> value >>

Deoarece parametrul de sesiune este legat de sesiune, nu va fi posibil să accesați parametrul de sesiune din metoda care rulează în fundal, deoarece aceasta va fi deja o sesiune diferită. Această nuanță poate veni ca o surpriză, deci este mai bine să vă pregătiți pentru aceasta în avans, trecând valoarea dorită ca parametru de metodă și inițializând-o din parametrul de sesiune la începutul procedurii.

Sesiuni de parametri 1C 8.3- o variabilă care stochează valoarea parametrului necesar pe durata sesiunii utilizatorului. De fapt, acesta este un fel de variabilă globală legată de sesiunea utilizatorului actual.

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. De obicei, acestea sunt setate la pornirea sistemului, în „modulul sesiune”. Dacă parametrul nu este definit, va fi aruncată o eroare în timpul apelului către acesta.

Un exemplu de setare a parametrului sesiunii 1C

Să vedem un caz de utilizare tipic pentru parametrii de sesiune - setarea utilizatorului curent. Voi lua un exemplu din pregătirea pentru.

În arborele metadatelor, creați un nou parametru de sesiune - CurrentUser, atribuiți-i un tip - ReferenceLink.

Obțineți gratuit 267 tutoriale video 1C:

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

Cod procedură:

Procedură Setarea SessionParameters (RequiredParameters) // caută fizic. față de nume de utilizator CurrentUser = Directoare. Persoane fizice. FindByDesign (UserName ()); // dacă nu este găsit, creați unul nou Dacă CurrentUser. Gol () Apoi NewUser = Directoare. Persoane fizice. CreateElement (); Utilizator nou. Nume = UserName (); Utilizator nou. Scrie (); CurrentUser = Utilizator nou. Legătură; EndIf; // atribuiți parametrului sesiunii CurrentUser un link către referința persoanelor Parametrii sesiunii. CurrentUser = Utilizator curent; Sfârșitul procedurii

5
Când este necesară o reglare mai fină a accesului, mecanismul RLS - Record Level Security vine în ajutor. Configurarea sistemului 1C: Enterprise 8 a fost poziționată inițial ca un program de contabilitate multi-companie și unul dintre ... 3
Pornind de la platforma 8.0 a sistemului 1C Enterprise, este posibil să se restricționeze drepturile de acces ale utilizatorilor la nivel de înregistrare. Pentru aceasta, se utilizează mecanismul RLS (Record Level Security). O astfel de „reglare fină” poate fi ... 3
Deseori întâlnesc întrebări legate de crearea de software și configurarea drepturilor utilizatorilor. În acest articol, voi oferi exemple pentru aplicații normale și gestionate care creează programatic un utilizator în ... 2
Întrebare: Am adăugat un utilizator nou. eu creez interfață nouă(copiind cea existentă) și indicați această interfață ca principală pentru acest utilizator. Problema este că noua interfață creată ...

  • COMUNICĂRI ACTuale 1C
  • EXEMPLE DE COD PENTRU PLATAFORMA 1C
Roluri, drepturi de acces în 1C 8.x
Cum știu dacă un anumit rol este disponibil pentru utilizatorul actual?
Dacă nu există un rol disponibil („Manager”), atunci raportează („Nu este permisă vizualizarea cererilor de la cumpărători!”); EndIf;
Cum pot obține informații despre rolurile de configurare?
FunctionPossibleConfigurationPossibleRoles () RoleList = newList of Values; RolesConfigurations = Metadate.Roles; Pentru fiecare rol din lista rolurilor din ciclul RoleConfiguration.Add (Role.Name); Sfârșitul ciclului; Lista rolurilor de returnare; EndFunction
Cum pot executa cod fără a verifica drepturile?
1. Utilizați un modul privilegiat 2. Plasarea codului programului, care ar trebui executat FĂRĂ CONTROLUL RESTRICȚIILOR, în modul comun cu instalarea steagului PRIVILEGAT la modul. Utilizați modul de executare a codului de program privilegiat Similar modului de funcționare a codului de module privilegiate. Modul poate fi activat / dezactivat prin intermediul limbii încorporate: Setați modul preferat (<Включить>) Parametru<Включить>(obligatoriu) Tipul: Boolean. Determină dacă modul privilegiat va fi activat: Adevărat - 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, să accelereze munca, deoarece nu vor exista restricții privind accesul la date și, în al doilea rând, vă permite să efectuați operațiuni cu date în numele utilizatorilor care nu au acces la aceste date. Se recomandă utilizarea modului privilegiat atunci când, din punct de vedere logic, trebuie să dezactivați verificarea drepturilor sau când puteți dezactiva verificarea drepturilor pentru a vă accelera munca. Este permisă utilizarea modului privilegiat atunci când lucrați cu date în numele unui anumit utilizator nu încalcă drepturile de acces stabilite pentru acest utilizator.