2009-11-08 13 views
5

Tengo el siguiente código:¿Redirige a un usuario a una vista específica cuando falla la autorización?

[AcceptVerbs(HttpVerbs.Post), Authorize(Roles = RoleKeys.Administrators)] 
    public ActionResult Edit(int id, FormCollection collection) 
    { 
     User user = userRepository.GetUser(id); 

     try 
     { 
      this.UpdateModel(user); 

      userRepository.Save(); 

      return this.RedirectToAction("Details", new { id = user.UserId }); 
     } 
     catch 
     { 
      this.ModelState.AddModelErrors(user.GetRuleViolations()); 

      return View(new UserFormViewModel(user)); 
     } 
    } 

Si el usuario actualmente conectado es no en la función Administradores, que les produzca el retroceso a la pantalla de inicio de sesión. El usuario es que ya tiene conectado, simplemente no está autorizado para realizar la acción solicitada.

¿Hay alguna forma de redireccionarlos a una vista específica, por ejemplo, AccessDenied?

Respuesta

5

Puede definir su propio atributo:

public class MyAuthorizeAttribute: AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     base.OnAuthorization(filterContext); 
     if (filterContext.Result is HttpUnauthorizedResult) 
     { 
      filterContext.Result = new RedirectToRouteResult(
      new RouteValueDictionary 
      { 
       { "controller", "Login" }, 
       { "action", "AccessDenied" } 
      }); 
     } 
    } 
} 

y utilizar

[AcceptVerbs(HttpVerbs.Post), MyAuthorize(Roles = RoleKeys.Administrators)] 
+0

no parece ser una propiedad filterContext.Cancel No hace? – mattruma

+0

¡Acabo de eliminar filterContext.Cancel y todo parece funcionar! – mattruma

+0

Lo sentimos, usamos un código anterior, ya no hay Cancelar. – LukLed

Cuestiones relacionadas