Utilizatori, grupuri și permisiuni în OpenPlatform
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 (
sapentru 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
referenceopț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:
- grupurile utilizatorului care nu sunt dezactivate;
- rândurile din
tbl_group_permissionale 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); valueal 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
permissionscând verifică o lansare (un array de șirurivalue), împreună cu id-urile grupurilor, ca să poată decide ce să afișeze (cum se conectează o aplicație). - Ecranul de configurare decide cine îl poate folosi prin indicatorul
saal 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.