Utenti, gruppi e permessi in OpenPlatform
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 (
saper 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
referencefacoltativo 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:
- i gruppi dell’utente che non sono disabilitati;
- le righe di
tbl_group_permissiondi 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); - il
valuedi 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
appse rifiuta di aprirne qualsiasi altra ("App not found"). - L’applicazione riceve il proprio elenco in
permissionsquando verifica un avvio (un array di stringhevalue), 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
sadell’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.