Ho set di controller che vengono utilizzati per ciascun tipo di autorizzazione. Ad esempio, un'autorizzazione di classe A avrà una serie di controllori ciascuna che richiede un'autorizzazione di classe A. C'è un modo per posizionare un attributo [Authorize(Role="Class A")]
da qualche parte che si applicherà a ciascuno di questi controller senza dover decorare ogni controller con lo stesso attributo?Come autorizzare un set di controller senza posizionare l'annotazione su ciascuno di essi?
risposta
è possibile inizializzare i controllori derivate dal controller di base. vale a dire mettere il proprio attributo su una classe di base del controllore e assicurare che ciascun controller all'interno sia derivato dalla classe base.
[Authorize(Role="Class A")]
public class CustomBaseController : Controller{}
public class AController: CustomBaseController{}
public class BController: CustomBaseController{}
impostare l'attributo su una classe Base ed ereditare, creando la gerarchia che meglio si adatta allo scenario ...
È possibile ereditare da un controller di base, come ad esempio
[Authorize(Role = "Class A")]
public class ClassARequiredController : Controller {}
Altrimenti stareste guardando un filtro globale e dalla vostra domanda presumo che abbiate ruoli e set multipli, quindi non penso che i filtri globali siano per voi.
Sì, c'è un modo, fanno tutti coloro A-class
regolatore derivato da un controller di base e posto su di essa la AuthorizeAttribute
:
[Authorize(Role="Class A")]
public class AController : Controller
{
...
}
public class AFirstController : AController // Gets it's parent attribute
{
...
}
public class ASecondController : AController // Gets it's parent attribute
{
...
}
Se avete tempo, potete dare un'occhiata a questo http://stackoverflow.com/questions/32741403/inheritance-of-authorized-roles-in-controller-classes grazie. –
2 o 3 risposte qui spiegato come si può fare ... ma è anche possibile utilizzare Fluent Security per gestire tutti i setup controller + azioni in un unico file. Alcuni dei benefici (dal loro sito): configurazione basata
Codice
Nessun attributi o xml ingombrano il vostro codice.
bassa impronta
perfetto di sicurezza non si diffonderà a macchia d'olio nella vostra applicazione. La tua configurazione può essere conservata in un singolo file.
ora si imposta automaticamente su una pagina di parcheggio del dominio. Fluent Security è ancora una cosa? – Caimen
Inoltre, a seconda del numero di controller che hai, potresti facilmente posizionare l'attributo fastidioso [Autorizza] in alto. Avendo un controller di base, sembra che tu debba pasticciare con ogni controller in ogni caso. – FrankO
Sì, ma l'utilizzo del controller di base è una procedura consigliata per l'avvio e il controllo di alcuni dati per tutti i controller. Forse vuoi usare l'attributo Autorizza personalizzato. Anche le modifiche apportate all'attributo Autorizzazione personalizzata su un singolo controller sono facili. L'URL – gandil