6

我正在嘗試確保控制器操作以防止用戶訪問他們無權訪問的實體。我可以用下面的代碼來做到這一點。如何使用Custom AuthorizeAttribute控制器利用參數值?

public ActionResult Entity(string entityCode) 
{ 
    if (CurrentUser.VerifyEntityPermission(entityCode)) 
    { 
     //populate viewModel... 
     return View(viewModel); 
    } 
    return RedirectToAction("NoAccessToEntity", "Error"); 
} 

我想能夠添加一個屬性到控制器動作本身。爲了驗證對實體的訪問,我需要查看傳遞給控制器​​的值以及用戶有權訪問哪些實體。這可能嗎?

[EntityAuthRequired] 
public ActionResult Entity(string entityCode) 
{ 
     //populate viewModel... 
     return View(viewModel); 
} 
+0

你是怎麼做到的 – Dragon 2017-04-06 13:09:55

回答

3

像這樣的東西可能會幫助你的方式。儘管您可能希望爲屬性添加一些附加屬性,以允許您爲每個操作指定您的entityCode參數,而不是對其進行硬編碼。

public class EntityAuthRequired : FilterAttribute, IAuthorizationFilter 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     //Make sure that this is not NULL before assigning value as string... 
     var entityCode = filterContext.RouteData.Values["entityCode"] as string; 
     // do your logic...   
     if (!allowed) 
      filterContext.Result = new HttpUnauthorizedResult();    
    } 
} 

而且,如果entityCode是不是在你的RouteData,您可以使用filterContext.RequestContext.HttpContext.Request看看POST數據。

+0

如何讓控制器在AuthorizeAttribute和AuthorizeRequest方法中發佈json值 – Dragon 2017-04-06 13:09:06

相關問題