Qualcosa mi infastidisce molto del modo in cui l'autorizzazione tende a essere eseguita con i ruoli in ASP.NET MVC.
Il modo in cui è normalmente fatto è che hai una tabella utenti e una tabella ruoli. Un utente può avere molti ruoli.
Quindi decori i tuoi controller / azioni con un attributo authorize che dice quali ruoli vuoi consentire l'accesso al controller / azione:
[Authorize(Roles = "Admin")]
public ActionResult AdminOnlyAction()
{
}
Il problema con questo è che il tuo codice dipende dai dati all'interno del database.
Ovviamente, all'avvio dell'applicazione potresti seminare il tuo database con i ruoli necessari se non sono presenti ma c'è ancora una fragile dipendenza dai dati nel database (ad esempio potrebbe essere cancellato, rinominato, ecc. ecc.) .
Avere un enum o qualcosa di simile con i livelli di ruolo in invece di memorizzarli nel database sembra ragionevole, ma mi lascia ancora una sensazione acida.
Esiste un'alternativa elegante alla quale non mi sono imbattuto?