ForgeOpenPlatform
ro

OpenPlatform

Utilizatori, grupuri și permisiuni în OpenPlatform

OpenPlatform · openplatform@5 openplatformusersgroupspermissions

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).
  • 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.