que tienen un escenario que no he podido resolver:UrlHelper y ViewContext dentro de un atributo de autorización
estoy jugando un poco con la creación de mi propio atributo de autorización personalizado para MVC. El principal aspecto de la funcionalidad que me gustaría agregar es tener la capacidad de cambiar el lugar en el que se redirige al usuario si no cumple una determinada función. No me importa que el sistema los envíe de vuelta a la página de inicio de sesión si no están autenticados, pero me gustaría elegir dónde enviarlos si están autenticados pero no tienen permiso para acceder a ese método de acción.
Aquí es lo que me gustaría hacer:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public string Action;
public string Controller;
protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
{
// if User is authenticated but not in the correct role
string url = Url.Action(this.Action, this.Controller);
httpContext.Response.Redirect(url);
}
}
Y como un bono adicional Quisiera tener acceso a ViewContext y TempData antes de hacer la redirección.
¿Alguna idea sobre cómo podría obtener una instancia de UrlHelper y ViewContext en el atributo?
Brillante, THX. Después de ver su respuesta, me di cuenta de que simplemente podría haber preguntado "¿Cómo hago para obtener el AuthorizationContext"? Una vez que tengo eso, soy peligroso. –
Nota: Implementar un método OnAuthorization() no es un ejercicio trivial. Si elige anular OnAuthorization() en lugar de AuthorizeCore(), agregue el código en OnAuthorization() para deshabilitar o enganchar el almacenamiento en caché de salida. Consulte http://forums.asp.net/p/1533590/3737756.aspx para obtener más información. – Levi