17

クラス名RightCheckerAttributeを使用して、MVC3アプリケーションでユーザー権限をチェックしています...したがって、RightCheckerAttributeクラスは次のようになります...

    public bool isAdmin { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpContextBase context = filterContext.HttpContext;

        bool result = Convert.ToBoolean(context.Request.QueryString["isAdmin"].ToString());

        if (isAdmin != result) 
        {
            RouteValueDictionary redirecttargetDictionary = new RouteValueDictionary();
            redirecttargetDictionary.Add("action", "NoPermission");
            redirecttargetDictionary.Add("controller","Singer");
            filterContext.Result = new RedirectToRouteResult(redirecttargetDictionary);

        }

        //base.OnActionExecuting(filterContext);
    }

したがって、これを適用するメソッドでは、頭が..

[RightChecker (isAdmin=true)]

私はこのメソッドをこのように実行しています..

http://localhost:5576/Singer/DeleteSinger?isAdmin=true

問題は、true または false を渡すかどうかです...結果変数を false として取得しました...そして、次のようになります。

例外[Null オブジェクト参照]...

4

4 に答える 4

19

クエリ文字列にisAdmin=falseまたはを渡していないようです。isAdmin=trueわたしにはできる。ただし、querystringパラメーターを渡していない状況を処理する必要があります。私の実装を確認してください。質問のコメントセクションで述べたように、これをクエリ文字列に渡すのに十分なセキュリティが確保されていません。

        public class RightChecker : ActionFilterAttribute
        {
            public bool IsAdmin;            

            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {

               bool result = false;
               if (filterContext.HttpContext.Request.QueryString["isAdmin"] != null)
               {
                       bool.TryParse(filterContext.HttpContext.Request.QueryString["isAdmin"].ToString(), out result);
               }

               if (IsAdmin != result) 
               {
                   //your implementation
               }
            }
        }

あなたの行動方法

    [RightChecker(IsAdmin=true)]
    public ActionResult AttCheck()
    {
        return View();
    }
于 2012-05-15T05:16:43.580 に答える
1

クエリ文字列からの権利を確認することは、実際には安全ではありません。あなたはこれを試すことができます: [リンク] 「セキュリティを意識した」アクションリンク?

しかし、mvc 3 api の変更により、一部のコードは ActionIsAuthorized Method で廃止されました。自分で修正できます。ここで質問された質問を参照してください [リンク] https://stackoverflow.com/questions/10545018/how-to-get-authorizationfilters-from -filterproviders

于 2012-05-15T05:51:04.060 に答える
0

以下に示すViewDataでこれを渡します。

public ActionResult Test(bool testParam)
{
   ViewData["isAdmin"] = testParam;
   return View();
}
于 2012-05-15T07:15:55.673 に答える
0

Seems like maybe the context.Request.QueryString["isAdmin"].ToString() is causing a NullReferenceException.

Try

var param = context.Request.QueryString["isAdmin"] as string ?? "false";
var result = param == "true";
于 2012-05-15T04:49:47.693 に答える