我的网站对所有人开放,但我有一个控制器,它有一些方法,只有拥有用户和密码的经理才能进入。我将布尔值保存IsManager
在session
.
我想使用 authorize 属性来阻止 whoever IsManager == false
。
问问题
6112 次
2 回答
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();
}
}
于 2012-03-21T17:31:11.063 回答
1
为了使这符合 ASP.NET 安全性,您应该将 IsManager 角色添加到您的成员资格/角色系统,然后将该用户添加到该角色。那时不需要黑客攻击,您可以使用内置的 Authorize 属性。
您是否使用内置的会员服务提供商?如果是这样,这将是一个快照。
于 2012-03-21T18:13:55.543 回答