你可以通過創建一個子類AuthorizeAttribute
using System.Web;
using System.Web.Mvc;
namespace Filters
{
public class AuthorizePartnerModule : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// getting the parameter from the request
string partnerName = httpContext.Request.Params["groupId"].ToString();
// custom validation
return User.CanAccessPartnerModule(THIS_MODULE_ID, partnerName);
}
}
}
擴展與自定義授權過濾器授權,那麼,你可以用驗證您的操作方法:
[AuthorizePartnerModule(Roles = THIS_MODULE_ID)]
public ActionResult Edit(string partnerName)
{
...
}
另一種選擇是創建自定義ActionFilter(實施IActionFilter)。一個ActionFilter實現兩種方法:
- OnActionExecuting在動作方法
- OnActionExecuted被操作方法執行之後執行權之前執行。
所以,你可以進行必要的驗證的東西,如:
using System.Web.Mvc;
namespace Filters {
public class AuthorizePartnerModule : FilterAttribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
// getting the parameter from the request
string partnerName = filterContext.ActionParameters["partnerName"].ToString();
// custom validation
if (!User.CanAccessPartnerModule(THIS_MODULE_ID, partnerName))
{
filterContext.Result = new HttpNotFoundResult();
}
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
// do nothing
}
}
}
在這種情況下,然而,你將不得不驗證這樣的:
[Authorize(Roles = THIS_MODULE_ID)]
[AuthorizePartnerModule]
public ActionResult Edit(string partnerName)
{
...
}
是的,這是可能的覆蓋'Authorize'屬性。如果明天你沒有得到答案,我會針對這個特定問題發佈一些代碼。 – Shoe 2014-09-11 05:13:29
@Shoe謝謝...我不知道'AuthorizeAttribute'應用於參數... – 2014-09-11 06:33:17