Domanda

Attualmente io uso [Autorizza (ruoli = ".....")] per fissare le mie azioni di controllo sul mio ASP.NET MVC 1 app, e questo funziona bene. Tuttavia, alcune opinioni di ricerca bisogno di avere pulsanti che percorso a queste azioni che devono essere abilitato / disabilitato in base al record selezionato nella lista di ricerca, e anche i privs sicurezza dell'utente loggato.

Per questo penso che ho bisogno di avere una classe di accesso ad una tabella di DB che rimandi questi controllore di destinazione / azioni con ruoli applicazione per determinare lo stato di questi pulsanti. Ciò, ovviamente, le cose disordinato come dovranno essere mantenuti in 2 posti privs - in quella classe / tavolo DB e anche sulle azioni di controllo (più, se voglio modificare l'accesso all'azione dovrò cambiare il codice e compilare piuttosto che modificare una voce della tabella DB).

Idealmente mi piacerebbe estendere la funzionalità [Autorizza] in modo che, invece di dover specificare i ruoli nel [Autorizza] il codice, si interrogherà la classe di protezione in base all'utente, controller e l'azione e che sarà poi restituire un boolean consentire o negare l'accesso. Ci sono buoni articoli su questo - non riesco a immaginare che sia una cosa insolita di voler fare, ma mi sembra di essere in lotta per trovare qualche cosa su come farlo (potrebbe essere Lunedi mattina cervello). Ho iniziato un codice a fare questo, guardando articolo http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/ , e sembra iniziare fuori ok, ma io non riesce a trovare il modo "corretto" per ottenere i valori del controller e di azione chiamata dalla HttpContext - potrei forse fudge un po 'di codice per estrarli dalla richiesta URL, ma che non mi sembra giusto per me e mi piacerebbe piuttosto farlo correttamente.

Saluti

MH

È stato utile?

Soluzione

Ho trovato questo su un altro forum e così posterò qui nel caso qualcuno lo trova utile. Si noti che come si fa questo cambia a seconda se si sta utilizzando MVC 1 o 2

la classe si crea deve attuare

public void OnAuthorization(AuthorizationContext filterContext)

e quindi è possibile utilizzare

string controllerName = filterContext.RouteData.Values["controller"].ToString();

e lo stesso, sostituendo "azione" per "controller" (assicuratevi di controllare per i valori nulli in questi valori prima). In MVC 2 questo può essere cambiato in filterContext.ActionDescriptor.ActionName e .ActionDescriptor.ControllerDescriptor.ControllerName e non dovrà verificare la presenza di valori null

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top