# Utilizatori, grupuri și permisiuni în OpenPlatform

> Cum ajunge un utilizator la o aplicație în OpenPlatform: grupurile decid ce aplicații vede utilizatorul și ce valori de permisiune primește fiecare aplicație.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: ro
Content-SHA256: 0ecf3af791d7ec134d7c89119275ee7b7f1e6a01be4607d0e980a690f2d65e96
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

OpenPlatform separă **cine** (utilizatorii), **unde** (aplicațiile) și **ce** (permisiunile), cu grupurile la mijloc:

- Un **utilizator** are un nume, un e-mail, o limbă, o parolă și indicatori (`sa` pentru administrator, `isconfirmed`, `isdisabled`, `isinactive`, `notifications`, `sounds`...) și aparține unui număr oarecare de grupuri (schema `@User`, `plugins/setup/schemas/users.js`).
- Un **grup** are un nume, o culoare, o pictogramă, un `reference` opțional și o listă de permisiuni (schema `@Group`, `plugins/setup/schemas/groups.js`).
- O **aplicație** își declară propriile permisiuni: fiecare are un nume și un `value`, un șir simplu pe care aplicația îl înțelege (`plugins/setup/schemas/apps.js`).

## Cum se calculează accesul

Funcția `FUNC.permissions(userid, callback)` din `definitions/func.js` construiește, pentru un utilizator:

1. grupurile utilizatorului care nu sunt dezactivate;
2. rândurile din `tbl_group_permission` ale acelor grupuri: un rând cu o permisiune acordă acea permisiune a unei aplicații, iar un rând **fără** permisiune acordă doar aplicația (utilizatorul o vede și primește o listă goală de permisiuni);
3. `value` al fiecărei permisiuni acordate, doar pentru aplicațiile care nu sunt eliminate și nu sunt dezactivate.

Rezultatul are trei părți: aplicațiile utilizatorului (`apps`), valorile permisiunilor pe aplicații (`permissions`) și grupurile (`groups`). Este stocat ca JSON în coloana `cache` a utilizatorului, cu un `cachefilter` care listează grupurile (`G<id>`) și aplicațiile (`A<id>`) de care depinde. Când se schimbă un grup sau o aplicație, `FUNC.clearcache(id)` golește cache-ul fiecărui utilizator al cărui filtru conține acel identificator, iar cererea următoare îl reconstruiește.

## Unde o vede aplicația

- Portalul listează doar aplicațiile din `apps` și refuză să deschidă oricare alta ("App not found").
- Aplicația primește propria listă în `permissions` când verifică o lansare (un array de șiruri `value`), împreună cu id-urile grupurilor, ca să poată decide ce să afișeze ([cum se conectează o aplicație](/en/openplatform/how-an-app-connects/)).
- Ecranul de configurare decide cine îl poate folosi prin indicatorul `sa` al utilizatorului.

Un obicei bun, care rezultă din modul în care funcționează codul: numește `value` al unei permisiuni după acțiunea din aplicația ta (`orders.read`, `orders.write`) și asociază grupurile cu aceste valori în OpenPlatform, astfel încât aplicația ta să verifice doar șiruri.
