Pregunta

Me gustaría usar etiquetas [Autorizar (Roles = " Admin ")] en mis métodos de controlador.

Si un usuario no es un administrador, me gustaría devolverlo a mi pantalla de inicio de sesión. El comportamiento predeterminado de devolver al usuario a mi página de inicio de sesión es redirigir a mi usuario a " Cuenta / Iniciar sesión " utilizando una URL de obtención.

El problema es que las subpáginas de mi sitio web son vistas parciales actualizadas por las llamadas de Ajax, incluida la pantalla de inicio de sesión.

Así que mi pregunta es: ¿Es posible modificar la siguiente clase para devolver una redirección de publicaciones en lugar de una redirección de obtención?

public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
  override public void OnAuthorization(AuthorizationContext filterContext)
  {
    base.OnAuthorization(filterContext);
    // Only do something if we are about to give a HttpUnauthorizedResult and we are in AJAX mode.
    if (filterContext.Result is HttpUnauthorizedResult && filterContext.HttpContext.Request.IsAjaxRequest())
    {
      filterContext.Result =  new RedirectResult("../Account/Login");
    }
  }
}
¿Fue útil?

Solución

Aparentemente el problema parece solucionado eliminando

[Acceptverbs(HttpVerbs.Post)]

atributo en el método de inicio de sesión de mi controlador de cuenta.

De esta manera, ni siquiera tenemos que anular el atributo AuthorizeAttribute

:)

Otros consejos

Encontré una solución en Microsoft.WebPages.PreApplicationStartCode.SetupFormsAuthentication()

Solo es necesario agregar un appSetting llamado " loginUrl " para especificar la acción de inicio de sesión:

<add key="loginUrl" value="~/Account/LogOn"/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top