【问题标题】:Implementing object-level security with attributes in ASP.NET MVC在 ASP.NET MVC 中使用属性实现对象级安全性
【发布时间】:2011-01-23 16:26:04
【问题描述】:

是否可以使用自定义ActionFilterAttribute 实现对象级安全性?

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

假设我将其命名为 ObjectAuthorizeAttribute 并按预期用途:

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

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

这样的东西已经可用了吗?

【问题讨论】:

    标签: c# asp.net-mvc attributes actionfilterattribute


    【解决方案1】:

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

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

    【讨论】:

    • 我错了。即使Values 是从字符串到对象的字典,RouteData.Values["id"] 在我的情况下仍然是一个字符串,即使我在方法签名中指定了int id。无论如何,您提到 RouteData 属性非常有帮助。
    【解决方案2】:
    var id = filterContext.HttpContext.Request["id"];
    

    【讨论】:

    • 这适用于 Edit?id=1 但不适用于 Edit/1,它通常是 MVC 中的同一页面。
    猜你喜欢
    • 2017-08-11
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2011-08-08
    • 1970-01-01
    相关资源
    最近更新 更多