2012-09-21 50 views
5

El problema que estoy tratando de resolver me parece muy simple: mi aplicación tiene un menú para todo el sitio desde el cual el usuario puede navegar a varias áreas. Los elementos del menú son simplemente enlaces a métodos ActionResult. Estoy usando un AuthorizeAttribute personalizado en las acciones para hacer cumplir las funciones de autorización del usuario. Eso funciona bien, ya que evita que el usuario ejecute la acción si no tiene los roles adecuados. Lo que quiero hacer, sin embargo, ni siquiera es mostrar la opción de menú para navegar a esa acción si no están autorizados para realizarla.Determine si la acción del controlador está autorizada antes de llamarlo

Por lo tanto, en el nivel más simple, quiero ser capaz de hacer algo como esto:

var isAuthorized = IsAuthorized("ControllerName", "ActionName", currentUser); 

El método IsAuthorized entonces mirar cualquier AuthorizeAttributes en la acción, y evaluar si el usuario dado sería capaz de ejecutarlo.

¿Existe tal enfoque? Supongamos que no tenemos una instancia del controlador en el momento en que hacemos esta evaluación.

+0

"a custom' AuthorizeAttribute'" - ¿te refieres a una que hayas escrito tú mismo, o es una de las integradas con ese nombre? –

+0

Sí, uno que me escribí para implementar requisitos de autorización específicos. Como en, "public class MyAuthorizeAttribute: AuthorizeAttribute" – Dan

Respuesta

5

Un segundo paso en la búsqueda de un acercamiento a esto resultó en exactamente lo que estaba buscando. Dejaré esta pregunta aquí en caso de que lleve a otros a esta respuesta.

Create an authorized action link extension for ASP.NET MVC 3

La aplicación utiliza casi exactamente la sintaxis que estaba buscando, y funciona en la práctica.

+0

Debe marcarlo como respondido, incluso si usted es el respondedor. – labilbe

Cuestiones relacionadas