2011-01-23 4 views
3

Est-il possible d'implémenter la sécurité au niveau de l'objet avec un code personnalisé ActionFilterAttribute? J'ai lu Branislav Abadjimarinov's answer à Get permission from Authorize Attribute? et j'ai commencé à penser à créer un filtre d'action similaire à AuthorizeAttribute pour implémenter la sécurité au niveau de l'objet.Implémentation de la sécurité au niveau de l'objet avec des attributs dans ASP.NET MVC

Supposons que je devais appeler ObjectAuthorizeAttribute avec l'usage prévu:

[ObjectAuthorize] 
public ActionResult Edit(int id) 
{ 
    //... 

Quelle serait la meilleure façon d'accéder à la valeur d'identité au sein OnActionExecuting?

Est-ce que quelque chose comme ceci est déjà disponible?

Répondre

2

Vous pouvez étendre le AuthorizeAttribute et avoir accès à des choses comme RouteData via le AuthorizationContext. Si vous faites une autorisation, je pense qu'il est plus logique de commencer par AuthorizeAttribute plutôt que par ActionFilterAttribute.

var id = filterContext.RouteData.Values["id"]; 
+0

J'avais tort. Même si 'Values' est un dictionnaire de chaînes à objets,' RouteData.Values ​​["id"] 'est toujours une chaîne dans mon cas même si je spécifie' int id' dans la signature de la méthode. Peu importe, votre mention de la propriété 'RouteData' a été extrêmement utile. –

1
var id = filterContext.HttpContext.Request["id"]; 
+2

Ceci fonctionnera pour Edit? Id = 1 mais pas pour Edit/1, qui est habituellement la même page dans MVC. –

Questions connexes