2011-01-23 91 views
3

是否可以使用自定义的ActionFilterAttribute实现对象级安全性?在ASP.NET MVC中使用属性实现对象级安全性

我读Branislav Abadjimarinov's answerGet permission from Authorize Attribute?并开始考虑制作类似于AuthorizeAttribute的动作过滤器来实现对象级别的安全性。

假设我是与使用目的来调用它ObjectAuthorizeAttribute

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

什么是内OnActionExecuting访问ID值的最简单的方法?

是这样的东西已经可用?

回答

2

可以扩展AuthorizeAttribute,并有通过AuthorizationContext访问之类的RouteData。如果您正在进行授权,我认为从AuthorizeAttribute而不是ActionFilterAttribute开始更合理。

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

我错了。尽管`Values`是从字符串到对象的字典,但在我的情况下,RouteData.Values [“id”]`仍然是一个字符串,即使我在方法签名中指定了'int id`。无论如何,你提到`RouteData`属性是非常有用的。 – 2011-01-23 23:03:53

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

这将适用于Edit?id = 1,但不适用于Edit/1,它通常是MVC中的相同页面。 – 2011-01-24 02:26:24