ruoli utente array vs stringa

-1

Sto lavorando a un progetto meanjs. I ruoli utente sono impostati come array:

roles = ['admin', 'user', 'manager'];

perché non impostarlo in questo modo?

role = 'admin'

Perché è utilizzata la convenzione di un array piuttosto che impostare semplicemente un valore di ruolo come stringa?

    
posta Justin Young 08.12.2015 - 23:46
fonte

1 risposta

3

L'intera idea del controllo degli accessi basato sui ruoli è che ogni utente può soddisfare più ruoli. Nel sistema semplice, ciascun ruolo può essere un superset di un altro ruolo, ad es. %codice%. Ma questo non deve essere il caso.

L'esempio più ovvio è quando abbiamo più istanze di una risorsa e un ruolo si applica solo a una singola istanza. Per esempio. un utente può essere amministratore su server-5 e server-3, ma non su altri server dove sono solo utenti. Ciò richiederebbe una configurazione come

roles = ['admin-5', 'admin-3', 'user']

È anche possibile che un sistema abbia più ruoli separati piuttosto che sottoinsiemi di permessi. Per esempio. un server FTP può essere configurato in modo che chiunque possa caricare i dati ma non scaricarli, ma anche in modo che tutti possano scaricare dati ma non caricarli. Così diversi utenti avrebbero set di ruoli diversi:

user1 = ['uploader']
user2 = ['downloader']
user3 = ['uploader', 'downloader']

Quindi, perché non creiamo un super ruolo con entrambe le autorizzazioni? Perché non admin > manager > user ? Quando le autorizzazioni sono connesse a un singolo ruolo anziché a un gruppo di ruoli, ciò rende le autorizzazioni più facili da gestire (emettere, visualizzare, revocare) e implementare. Per verificare se un utente può caricare:

if UPLOADER in roles:
  ok

Con ruoli che ereditano da un altro, questo diventerebbe

if role == UPLOADER or role == FULLACCESS:
  ok

che è difficile da estendere quando si crea un nuovo super ruolo che include l'autorizzazione dell'autore del caricamento.

O se introduciamo un sistema di ereditarietà in cui ogni permesso può comportare un controllo complicato:

if role.permits(UPLOAD):
  ok

Chiaramente, questi sono più complicati. Quando si implementa la sicurezza, la complessità è pericolosa . Troppo facile introdurre un bug difficile da vedere che concede il permesso a chiunque.

Considerando che RBAC è semplice sia per gli utenti che per gli sviluppatori, non sorprende che sia comune nei sistemi più avanzati.

(Questa risposta non discute la differenza tra ruoli e permessi, che introduce un ulteriore livello di mapping.)

    
risposta data 09.12.2015 - 00:38
fonte

Leggi altre domande sui tag