4

私のサイトは誰でも利用できますが、ユーザーとパスワードを持つマネージャーのみが入力できるメソッドを備えたコントローラーがあります。ブール値を に保存IsManagerしていsessionます。
authorize 属性を使用して、誰でもブロックしたいと思います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 に答える