【发布时间】:2012-03-21 17:24:11
【问题描述】:
我的网站对所有人开放,但我有一个控制器,它有一些方法,只有拥有用户名和密码的经理才能进入。我将布尔值 IsManager 保存在 session 中。
我想使用 authorize 属性来阻止IsManager == false。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 authorize-attribute
我的网站对所有人开放,但我有一个控制器,它有一些方法,只有拥有用户名和密码的经理才能进入。我将布尔值 IsManager 保存在 session 中。
我想使用 authorize 属性来阻止IsManager == false。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 authorize-attribute
首先定义一个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);
}
}
然后在受限的Action(或控制器)之上使用它:
//[TheFilter]
public class ManagersController : Controller
{
[TheFilter]
public ActionResult Foo()
{
...
return View();
}
}
【讨论】:
要使这与 ASP.NET 安全性保持一致,您应该将 IsManager 角色添加到您的成员资格/角色系统,然后将该用户添加到该角色。那时不需要黑客攻击,您可以使用内置的 Authorize 属性。
您是否使用内置的会员服务提供商?如果是这样,这将是一个快照。
【讨论】: