Nel nostro sistema di gestione dei diritti degli utenti seguiamo fondamentalmente "CRUD", dove ad ogni richiesta in entrata l'utente viene controllato contro i suoi diritti, e vede se ha creato, letto l'aggiornamento o distrugge i diritti per i dati a cui desidera accedere.
Questo sistema è stato creato dal mio predecessore, tuttavia sono costantemente in dubbio se questo è il sistema giusto da usare. Diciamo che ho un utente "admin", che è sotto il "rootadmin" - gli amministratori possono modificare gli account ma non il server stesso. Rootadmin potrebbe fare qualsiasi cosa, incluso il ripristino dell'intero server e altre cose divertenti.
Tuttavia, poiché può modificare gli account utente, dispone dell'accesso UPDATE sul "campo ruolo" di un utente e può aggiornare qualsiasi utente a qualsiasi livello, incluso "rootadmin". Quindi sembra semplice CRUD non è sufficiente.
Un altro esempio (per chiarire che questo è un caso che non è univoco per i privilegi rootadmin):
Ai dipendenti viene concesso il diritto di aggiornare lo stato di produzione di "articoli". Tuttavia, ogni dipendente lavora solo in una parte della società: quindi non dovrebbe avere il diritto di aggiornare (o leggere) articoli che si trovano al di fuori della sua linea di produzione.
Esiste un metodo ben noto per gestire i diritti degli utenti, in un sistema generalizzato? O ognuno ha la propria implementazione per ogni applicazione una nuova serie di regole?
La mia unica soluzione fino ad ora è quella di memorizzare "lambda" nel database, dove insieme alla destra c'è una "limitazione". Quindi leggerebbe: "l'utente X ha ragione Y (aggiorna il campo A in B) ma solo se lambda Z è restituito vero.
Tuttavia, ciò renderebbe il database realmente dipendente dalla lingua e memorizzerebbe codice non elaborato sul database. Oppure si dovrebbe scrivere un altro livello per interpretare una sorta di dsl.