Question

Je suis en train d'assurer une action de contrôleur pour empêcher un utilisateur d'accéder à une entité qu'ils n'ont pas accès. Je suis en mesure de le faire avec le code suivant.

public ActionResult Entity(string entityCode)
{
    if (CurrentUser.VerifyEntityPermission(entityCode))
    {
        //populate viewModel...
        return View(viewModel);
    }
    return RedirectToAction("NoAccessToEntity", "Error");
}

Je voudrais être en mesure d'ajouter un attribut à l'action du contrôleur lui-même. Afin de valider l'accès à l'entité, je dois voir quelle valeur a été transmise au contrôleur et quelles entités l'utilisateur a accès. Est-ce possible?

[EntityAuthRequired]
public ActionResult Entity(string entityCode)
{
        //populate viewModel...
        return View(viewModel);
}
Était-ce utile?

La solution

Quelque chose comme cela pourrait vous aider sur votre chemin. Bien que vous pouvez ajouter des propriétés supplémentaires à votre attribut pour vous permettre de spécifier votre paramètre entitycode sur chaque action, plutôt que de coder en dur il.

public class EntityAuthRequired : FilterAttribute, IAuthorizationFilter 
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        //Make sure that this is not NULL before assigning value as string...
        var entityCode = filterContext.RouteData.Values["entityCode"] as string;
        // do your logic...         
        if (!allowed)
            filterContext.Result = new HttpUnauthorizedResult();            
    }
}

En outre, si le entityCode est pas dans votre RouteData, vous pouvez utiliser filterContext.RequestContext.HttpContext.Request pour regarder les données POST.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top