Ciao lista!
Immaginiamo di avere un documentale i cui contenuti sono sottoposti ad
accesso discrezionale. Un utente pu possedere un documento e avere i
diritti di lettura, scrittura e cancellazione su di esso. Tale utente pu
voler consentire un accesso ad un altro utente, ma solo in lettura.
Fin qui, niente di eclatante. Immaginiamo per che laccesso ai documenti
sia determinato non solo dallidentit di un utente, ma ad esempio dalla
sua appartenenza ad un gruppo, oppure dalla presenza di uno specifico
tag sul suo account, o qualsivoglia altro meccanismo specifico della
vostra applicazione (ad esempio, nel nostro caso, lappartenenza ad un
dipartimento o il ricoprire un ruolo specifico allinterno
dellorganizzazione).
Inoltre, vogliamo avere la possibilit di ottenere rapidamente tutti i
documenti che un utente pu vedere in quel momento, e questa abilit deve
essere compatibile con altre funzionalit di filtraggio sulla base dati
(e.g. full-text search).
Enter Eaco: un framework che realizza proprio questo:
Con Eaco possibilie autorizzare le Risorse della propria applicazione
che devon esser sottoposte ad accesso RBAC (role-based). Ogni Risorsa
corredata di unACL, un hash salvato in una colonna JSONB su Postgres
9.4. possibile poi definire gli Attori del sistema, che vanno corredati
da un set di Designatori (serve un nome migliore) che ne descrivono le
varie appartenenze.
LACL va poi a contenere nelle chiavi i Designatori, e nei valori i ruoli
che un Designatore ha sulla specifica Risorsa. Lintersezione tra i
Designatori in possesso di un Attore e di quelli definiti sullACL della
Risorsa danno come risultato il ruolo che un Attore ha su di essa, e i
permessi risultanti.
Ruby 2.0, documentato certosinamente, testato alla morte su Rails 3.2
→ 4.2, in produzione da circa due anni. stato estratto da un sistema
corporate di nome Scriptoria (che qui in lista alcuni conoscono e
che speriamo possa diventare anch’esso Open Source nei prossimi tempi.
Sono graditissimi commenti, review, opinioni, flame lussurreggianti e
tapioche sbrindellanti!
Fateci sapere,