example - ASP.NET MVC 4 atributo de Autorización personalizado-¿Cómo redirigir a los usuarios no autorizados a la página de error?
authorize mvc example (1)
HandleUnauthorizedRequest
anular el HandleUnauthorizedRequest
como se especifica here .
public class CustomAuthorize: AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if(!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
base.HandleUnauthorizedRequest(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new{ controller = "Error", action = "AccessDenied" }));
}
}
}
** Nota: declaración condicional actualizada enero ''16
Esta pregunta ya tiene una respuesta aquí:
Estoy usando un atributo de autorización personalizado para autorizar el acceso de los usuarios según sus niveles de permiso. Necesito redirigir a los usuarios no autorizados (por ejemplo, el usuario intenta eliminar una factura sin eliminar el nivel de acceso) para acceder a la página denegada.
El atributo personalizado está funcionando. Pero en un caso de acceso de usuarios no autorizados, nada se muestra en el navegador.
Código Contoller.
public class InvoiceController : Controller
{
[AuthorizeUser(AccessLevel = "Create")]
public ActionResult CreateNewInvoice()
{
//...
return View();
}
[AuthorizeUser(AccessLevel = "Delete")]
public ActionResult DeleteInvoice(...)
{
//...
return View();
}
// more codes/ methods etc.
}
Código de clase de atributo personalizado.
public class AuthorizeUserAttribute : AuthorizeAttribute
{
// Custom property
public string AccessLevel { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (!isAuthorized)
{
return false;
}
string privilegeLevels = string.Join("", GetUserRights(httpContext.User.Identity.Name.ToString())); // Call another method to get rights of the user from DB
if (privilegeLevels.Contains(this.AccessLevel))
{
return true;
}
else
{
return false;
}
}
}
Aprecie si puede compartir su experiencia en esto.