Contesto
Voglio progettare una procedura o un'attività di sistema da caricare in un database, i dati che sono necessari al sistema per funzionare. L'esempio più semplice che riesco a trovare è un ACL (o RBAC, non sicuro quale sia il termine corretto) in cui un utente ha bisogno di autorizzazione per eseguire determinate azioni (creare una risorsa, visualizzare una risorsa, visualizzare un elenco con scope, visualizzare un globale lista).
In questo esempio, come schema di base avremmo un modello di relazione user N:M role N:M permission
.
La tabella permission
contiene una colonna (diciamo name
) con un valore che verrà utilizzato dal sistema per determinare l'autorizzazione necessaria per eseguire questa azione:
if loggedUser.can('reports.view.global')
reports = reportsRepo.all()
else
reports = reportsRepo.allForDepartment(loggedUser.department)
end
Poiché il sistema dipende da questi valori "hard coded", devono essere sincronizzati con il database su ciascuna distribuzione. Ciò significa che se la prossima versione aggiungerà 2 nuove funzionalità (con 2 nuove autorizzazioni) ed eliminerà 1 funzione (con 1 autorizzazione), l'attività di distribuzione dovrebbe aggiornare il database per mantenerlo sincronizzato con le autorizzazioni con cui funzionerà la prossima versione.
Domande
Avendo spiegato ciò, voglio anche prendere in considerazione che non sto cadendo sotto XY Problem e questo è in realtà l'approccio corretto per questo problema:
- Questo tipo di dati di sistema (non è sicuro se il concetto stesso ha un nome) può essere memorizzato in un database (a scopi di query-abilità) o esiste un modo standard migliore?
- È un approccio cli che verifica i valori dei dati di sistema (in alcuni file di configurazione) e li sincronizza con la tabella
permission
(aggiunta o eliminazione di righe) un buon approccio, o non è dovuto a qualche motivo che sono non riescono a vedere al momento?
Non ho mai visto un'implementazione di questo scenario comune prima, quindi mi chiedo se c'è già un approccio standard per questo particolare problema (forse è anche chiamato e devo solo google ma non so che è nome ...)?