Sicurezza nel modello *e* nei controller

È da un po’ di tempo che sono insoddisfatto dei vari metodi di
protezione dopo l’autenticazione.

Al momento (come ho detto più volte) sto usando LoginEngine per
l’autenticazione, sopra cui uso UserEngine. Il giocattolo funziona bene
(altro che giocattolo… è del tutto sovradimensionato, per adesso).
Complessivamente continuo a meditare di riscrivere il sistema di
sicurezza. In particolare io ho anche il concetto di “ownership”, ovvero
ci sono istanze (o attributi) di oggetti che quasi a prescindere dal
“ruolo” dell’utente si devono potere mostrare.

Talvolta penso di cadere nell’ “overdesign” (all’atto pratico sono
relativamente pochi gli oggetti che hanno il concetto di ownership). Ma
la cosa mi ha fatto riflettere su una cosa… il plugin per ACL (che non
ricordo il nome, ogni volta faccio una fatica boia per trovarlo) e
UserEngine lavorano a livello controller.
Sono “filtri” che dicono chi chiama cosa. Nulla da dire.

Il punto è che io sono convinto che la protezione sia anche nel dominio
del modello. Ci sono oggetti che certi utenti non devono accedere da
nessun controller (esempio un elemento non approvato da un moderatore
non deve essere visibile dagli utenti comuni). E non deve essere
visibile in alcuna maniera, per quanti possibili pannellini possa creare
(e quello in cui mi scordo il controllo ci scappa).

È il modello che deve impedire ad un certo utente di leggere certe cose.
Per lo meno nella mia visione, visto che sono cose “sottostanti” al
livello di controller. E pensandoci bene in casi simili con framework
meno “evoluti” e più manuali tipicamente avevo praticamente delle facade
nel model attraverso cui accedevo ai dati (e li veniva fatto il
controllo che chi chiedeva i dati aveva il permesso).

Medita e medita… matita su carta e mi rendo conto che quello che
vorrei è un oggetto abbastanza complesso (specie se lo voglio
riutilizzabile). Peraltro di qualcosa del genere ne aveva parlato anche
l’autore del plugin per ACL.

Se non che vedo che qualcuno (anzi Qualcuno) lo ha già scritto.
http://perens.com/FreeSoftware/ModelSecurity/

Solo che è vecchiotto e sembra non interagire bene con i nuovi aggeggi
di gestione utenti (AAA o LoginEngine che sia). Contiene parte di quelle
funzionalità e ci lavora in modo un po’ diverso.

Ora mi chiedo… c’è un plugin che fa quello che dico “moderno”? Oppure
devo “rassegnarmi” a mettermi sotto e scrivere io il tutto?


blog: http://www.akropolix.net/rik0/blogs | Enrico F.
site: http://www.akropolix.net/rik0/ | RiK0
forum: http://www.akropolix.net/forum/ | Linux Counter: #299198