Mysql
 sql >> Database >  >> RDS >> Mysql

ColdFusion:opzioni applicative basate sul ruolo?

Hai ragione, proteggere una pagina e proteggere gli elementi è diverso.

A mio parere e in pratica, penso che legare qualsiasi codice a un ruolo o utente sia in realtà l'approccio sbagliato. Invece, lega le autorizzazioni a elementi e pagine, quindi lega i ruoli a tali autorizzazioni. E, naturalmente, agli utenti vengono assegnati ruoli.

È importante averli tutti e tre :

  1. Utenti
  2. Ruoli
  3. Autorizzazioni <-- ecco cosa ti manca

Le autorizzazioni sono ciò che protegge elementi e pagine, non ruoli o utenti Il tuo codice non dovrebbe avere idea (perché non è necessario) di quali utenti o ruoli ci siano, solo nomi di autorizzazioni.

Quando un utente effettua l'accesso, prendo i suoi ruoli. Quindi prendo tutte le autorizzazioni assegnate a quei ruoli (semplicemente un elenco di valori di stringa).

Ad esempio, in una pagina potrei avere:

  • Aggiungi elemento
  • Visualizza elemento
  • Elimina elemento

Quando codifico quella pagina, proteggo effettivamente ciascuno di quegli elementi con stringhe di autorizzazione denominate simili ( addItem, viewItem, deleteItem).

<cfif listContainsNoCase( session.permissions, 'addItem' )>
    <!--- code to add item --->
</cfif>

(Nota:consiglio di utilizzare un tag o una funzione personalizzati per questo, ma a scopo di esempio, quanto sopra funziona bene).

Se lo fai in questo modo, fornisce la massima flessibilità e astrazione. Se proteggi elementi in base ai ruoli, ti limiti :

  • L'aggiunta di nuovi ruoli richiederà molte modifiche al codice!
  • La modifica delle autorizzazioni tra i ruoli richiede molte modifiche al codice!

Se lo fai come menzionato sopra, non avrai mai bisogno di cambiare il tuo codice di sicurezza all'interno della base di codice, perché l'autorizzazione "addItem" dovrebbe sempre essere sulla logica "aggiungi elemento", giusto? :)

Ora, se ti capita di dover creare un ruolo di tipo "manager", che abbia tutti i ruoli utente e alcuni diritti di amministratore selezionati, devi semplicemente creare quel ruolo e assegnargli le autorizzazioni corrette (forse addItem e editItem, ma non deleteItem) . Bam! Ora ho un ruolo di manager da assegnare agli utenti con nessuna modifica al codice !

Se avessi spruzzato il mio codice con il tipo di cose "è utente questo ruolo" - dovrei andare a modificare il mio codice ovunque per consentire il mio nuovo ruolo "manager" - che schifo!

Ha senso?

=)