2011-01-23 57 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