Questa è una domanda discutibile perché non sono più in questo progetto, ma continua a infastidirmi. Mi chiedo se qualcuno ha un'idea migliore per riferimento futuro e pratiche di programmazione generale.Sicurezza non basata sui ruoli?
L'approccio alla sicurezza da manuale è "sicurezza basata sui ruoli". Ogni schermata, report o altra attività è associata a uno o più ruoli; ogni utente è assegnato a uno o più ruoli; e quindi ogni utente può esercitare gli schermi, ecc. che corrispondono ai suoi ruoli e nient'altro. Destra?
Alcuni anni fa ho guidato un team per lo sviluppo di un sistema per la gestione di manuali tecnici militari. Ogni manuale aveva un "technical content manager", il responsabile della scrittura o della modifica; un "responsabile di magazzino", responsabile della registrazione delle copie e della loro spedizione; e un "manager amministrativo", responsabile del budget, che ha quindi deciso quanto spesso il libro sarebbe stato rivisto, quante copie sarebbero state stampate e così via. Ovviamente ogni libro aveva un gruppo di persone che ordinava copie e leggeva. (Dato che questo era l'esercito, dovevi essere autorizzato a mettere le mani su un libro, le autorizzazioni di sicurezza e tutto il resto.) Normalmente non ci preoccupavamo dei lettori attuali, ma piuttosto delle persone di ciascuna base che gestivano le biblioteche , ma non è davvero rilevante qui.
Quindi ... questi sono ovvi "ruoli", ma un ruolo era legato a un libro particolare. Una persona potrebbe essere il responsabile tecnico dei contenuti per il libro A, il responsabile amministrativo per il libro B e un lettore di 50 altri libri. Quindi non potevamo davvero dire che un utente avesse "un ruolo". Ogni utente aveva ruoli diversi per ogni libro.
Oltre a questo ci sono stati più privilegi a livello di sistema di routine: Abbiamo avuto un paio di amministratori di sistema autorizzato ad aggiornare nulla nel systeem, help desk persone che potevano vedere quasi tutti i dati, ma non si aggiorna, ecc
Ho finito per creare un database come questo. (Per evitare di entrare in alcuni dei nostri strana terminologia cambierò alcuni nomi di campo e di tabella qui, l'idea è la stessa.)
persona (person_id, nome, ecc)
Technical_Manual (manual_id, titolo, admin_manager_person_id, stock_manager_person_id, content_manager_person_id, ecc)
Authorized_Reader (manual_id, person_id, ecc)
utente (user_id, admin_role, ecc)
non ero davvero felice con questo schema, poiché significava che la sicurezza era suddivisa su tre tabelle: la tabella technical_manual, la tabella authorized_reader e la tabella utente. Ma ... c'era un modo più pulito in cui avremmo potuto farlo? Qualche idea migliore?
Questa è probabilmente la forma più semplice da utilizzare per questo tipo di protezione. È facile da seguire e consente a una persona di avere ruoli diversi per libri diversi o più ruoli per lo stesso libro. – David
Hmm, questo ha un potenziale. Non ho spazio per il mio commento come commento, vedi sotto come un nuovo post. – Jay