你可以通过创建一个子类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