Mantén la atención ya que en este enunciado vas a encontrar el hallazgo que buscas.Esta sección fue evaluado por nuestros especialistas para asegurar la calidad y veracidad de nuestro post.
Solución:
Podría hacer esto con una costumbre attribute como sigue.
[AuthorizeUser(AccessLevel = "Create")]
public ActionResult CreateNewInvoice()
//...
return View();
Clase de atributo personalizado de la siguiente manera.
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
return privilegeLevels.Contains(this.AccessLevel);
Puede redirigir a un usuario no autorizado en su personalizado AuthorisationAttribute
anulando el HandleUnauthorizedRequest
método:
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(
new
controller = "Error",
action = "Unauthorised"
)
);
Aquí hay una modificación para el anterior. responder. La principal diferencia es que cuando el usuario no está autenticado, utiliza el método original “HandleUnauthorizedRequest” para redirigir a la página de inicio de sesión:
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(
new
controller = "Account",
action = "Unauthorised"
)
);
else
base.HandleUnauthorizedRequest(filterContext);
Tal vez esto sea útil para cualquiera en el futuro, he implementado un atributo de autorización personalizado como este:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class ClaimAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter
private readonly string _claim;
public ClaimAuthorizeAttribute(string Claim)
_claim = Claim;
public void OnAuthorization(AuthorizationFilterContext context)
var user = context.HttpContext.User;
if(user.Identity.IsAuthenticated && user.HasClaim(ClaimTypes.Name, _claim))
return;
context.Result = new ForbidResult();
Agradecemos que desees secundar nuestra investigación poniendo un comentario y valorándolo te damos las gracias.