4

我的网站对所有人开放,但我有一个控制器,它有一些方法,只有拥有用户和密码的经理才能进入。我将布尔值保存IsManagersession.
我想使用 authorize 属性来阻止 whoever IsManager == false

4

2 回答 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 回答