我的网站对所有人开放,但我有一个控制器,有一些方法,只有具有用户和密码的经理才能进入。我将bool IsManager
保存在session
中
我想使用authorize属性来阻止IsManager == false
。
答案 0 :(得分:8)
首先定义ActionFilter
:
public class TheFilter: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var session = filterContext.HttpContext.Session;
if ((bool?)session["IsManager"] == true)
return;
//Redirect him to somewhere.
var redirectTarget = new RouteValueDictionary
{{"action", "{ActionName}"}, {"controller", "{ControllerName}"}};
filterContext.Result = new RedirectToRouteResult(redirectTarget);
}
}
然后在限制动作(或控制器)上方使用它:
//[TheFilter]
public class ManagersController : Controller
{
[TheFilter]
public ActionResult Foo()
{
...
return View();
}
}
答案 1 :(得分:1)
要使其与ASP.NET安全性保持一致,您应该将IsManager角色添加到您的成员资格/角色系统,然后将该用户添加到该角色。不需要黑客攻击,您可以使用内置的Authorize属性。
您使用的是内置会员提供商吗?如果是这样的话,那就快点了。