6

J'essaie de sécuriser une action du contrôleur pour empêcher un utilisateur d'accéder à une entité à laquelle il n'a pas accès. Je suis capable de le faire avec le code suivant. 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é, j'ai besoin de voir quelle valeur a été transmise au contrôleur et à quelles entités l'utilisateur a accès. Est-ce possible?Comment utiliser AuthorizeAttribute personnalisé pour le contrôleur utilisant la valeur du paramètre?

[EntityAuthRequired] 
public ActionResult Entity(string entityCode) 
{ 
     //populate viewModel... 
     return View(viewModel); 
} 
+0

comment vous avez fait cela – Dragon

Répondre

3

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

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.

+0

comment obtenir des valeurs de contrôleur post json dans Authorizeattribute.and dans la méthode AuthorizeRequest – Dragon