在ASP.NET MVC中使用属性实现对象级安全性
问题描述:
是否可以使用自定义的ActionFilterAttribute
实现对象级安全性?在ASP.NET MVC中使用属性实现对象级安全性
我读Branislav Abadjimarinov's answer到Get permission from Authorize Attribute?并开始考虑制作类似于AuthorizeAttribute
的动作过滤器来实现对象级别的安全性。
假设我是与使用目的来调用它ObjectAuthorizeAttribute
:
[ObjectAuthorize]
public ActionResult Edit(int id)
{
//...
什么是内OnActionExecuting
访问ID值的最简单的方法?
是这样的东西已经可用?
答
可以扩展AuthorizeAttribute,并有通过AuthorizationContext访问之类的RouteData。如果您正在进行授权,我认为从AuthorizeAttribute而不是ActionFilterAttribute开始更合理。
var id = filterContext.RouteData.Values["id"];
答
var id = filterContext.HttpContext.Request["id"];
+2
这将适用于Edit?id = 1,但不适用于Edit/1,它通常是MVC中的相同页面。 – 2011-01-24 02:26:24
我错了。尽管`Values`是从字符串到对象的字典,但在我的情况下,RouteData.Values [“id”]`仍然是一个字符串,即使我在方法签名中指定了'int id`。无论如何,你提到`RouteData`属性是非常有用的。 – 2011-01-23 23:03:53