mvc 3 session和authorizeAttribute

时间:2012-03-21 17:24:11

标签: asp.net-mvc asp.net-mvc-3 authorize-attribute

我的网站对所有人开放,但我有一个控制器,有一些方法,只有具有用户和密码的经理才能进入。我将bool IsManager保存在session中 我想使用authorize属性来阻止IsManager == false

2 个答案:

答案 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属性。

您使用的是内置会员提供商吗?如果是这样的话,那就快点了。