7

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

9

è 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{} 
+0

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

+2

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

2

impostare l'attributo su una classe Base ed ereditare, creando la gerarchia che meglio si adatta allo scenario ...

3

È 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.

4

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 
{ 
    ... 
} 
+0

Se avete tempo, potete dare un'occhiata a questo http://stackoverflow.com/questions/32741403/inheritance-of-authorized-roles-in-controller-classes grazie. –

4

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.

+1

ora si imposta automaticamente su una pagina di parcheggio del dominio. Fluent Security è ancora una cosa? – Caimen