ForgeOpenPlatform
it

OpenPlatform

Utenti, gruppi e permessi in OpenPlatform

OpenPlatform · openplatform@5 openplatformusersgroupspermissions

OpenPlatform separa chi (utenti), dove (applicazioni) e cosa (permessi) con i gruppi nel mezzo:

  • Un utente ha un nome, un’e-mail, una lingua, una password e dei flag (sa per l’amministratore, isconfirmed, isdisabled, isinactive, notifications, sounds...) e appartiene a un numero qualsiasi di gruppi (schema @User, plugins/setup/schemas/users.js).
  • Un gruppo ha un nome, un colore, un’icona, un reference facoltativo e un elenco di permessi (schema @Group, plugins/setup/schemas/groups.js).
  • Un’applicazione dichiara i propri permessi: ognuno ha un nome e un value, una semplice stringa che l’applicazione comprende (plugins/setup/schemas/apps.js).

Come viene calcolato l’accesso

La funzione FUNC.permissions(userid, callback) in definitions/func.js costruisce, per un utente:

  1. i gruppi dell’utente che non sono disabilitati;
  2. le righe di tbl_group_permission di quei gruppi: una riga con un permesso concede quel permesso di un’applicazione, e una riga senza permesso concede solo l’applicazione (l’utente la vede e riceve un elenco di permessi vuoto);
  3. il value di ogni permesso concesso, solo per le applicazioni non rimosse e non disabilitate.

Il risultato ha tre parti: le applicazioni dell’utente (apps), i valori dei permessi per applicazione (permissions) e i gruppi (groups). Viene memorizzato come JSON nella colonna cache dell’utente, con un cachefilter che elenca i gruppi (G<id>) e le applicazioni (A<id>) da cui dipende. Quando cambia un gruppo o un’applicazione, FUNC.clearcache(id) svuota la cache di ogni utente il cui filtro contiene quell’identificatore, e la richiesta successiva la ricostruisce.

Dove la vede l’applicazione

  • Il portale elenca solo le applicazioni in apps e rifiuta di aprirne qualsiasi altra ("App not found").
  • L’applicazione riceve il proprio elenco in permissions quando verifica un avvio (un array di stringhe value), insieme agli id dei gruppi, così può decidere cosa mostrare (come si connette un’app).
  • La schermata di configurazione decide chi può usarla tramite il flag sa dell’utente.

Una buona abitudine, che deriva da come funziona il codice: dai al value di un permesso il nome dell’azione nella tua applicazione (orders.read, orders.write) e associa i gruppi a quei valori in OpenPlatform, così la tua applicazione controlla solo stringhe.