0

小さな Web フォーム プロジェクトとして開始され、すぐに非常に大きくなったアプリケーションがあります。トリガーされたすべてのイベントをログに記録し、指定されたアクションに対するユーザーの権限を確認したいと思います。

すべてのイベントに機能を追加する代わりに、デフォルトの「System.Web.UI.Page」をオーバーライドする基本クラスを作成し、基本クラスの各イベント呼び出しをチェックするのが良い方法だと思いました。

そのクラスのコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Test
{

    /// <summary>
    /// Summary description for BasePage
    /// </summary>
    public abstract class BasePage : System.Web.UI.Page
    {
        public BasePage()
        {
            // Adding functionality to the "on load" event of the base class (Page)
            base.Load += new EventHandler(BasePage_Load);
            base.Unload += new EventHandler(BasePage_Unload);
            base.LoadComplete += new EventHandler(BasePage_LoadComplete);
        }

        private void BasePage_Load(object sender, EventArgs e)
        {
            LogEverything();
            AccessCheck();
        }

        private void BasePage_LoadComplete(object sender, EventArgs e)
        {
            LogEverything();
            AccessCheck();
        }

        protected override void RaisePostBackEvent(System.Web.UI.IPostBackEventHandler sourceControl, string eventArgument)
        {
            LogEverything();
            base.RaisePostBackEvent(sourceControl, eventArgument);
        }


        private void BasePage_Unload(object sender, EventArgs e)
        {
            LogEverything();
        }

        private bool LogEverything()
        {
            string sRawUrl = HttpContext.Current.Request.RawUrl;
            string sQueryString = HttpContext.Current.Request.QueryString.ToString();
            string sPage = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath;
            string sHttpMethod = HttpContext.Current.Request.HttpMethod;
            string sUserAgent = HttpContext.Current.Request.UserAgent;
            string sUserAddress = HttpContext.Current.Request.UserHostAddress;
            string sEventTarget = HttpContext.Current.Request.Form["__EVENTTARGET"];
            string sEventArgument = HttpContext.Current.Request.Form["__EVENTARGUMENT"];
            string sEventValidation = HttpContext.Current.Request.Form["__EVENTVALIDATION"];

            // TODO: find the event that triggered the postback

            return Logging.append(Logging.logLevelType.Info, "Baseclass is here!");
        }

        private bool AccessCheck()
        {
            // enforce security here ...
            return true;
        }
    }
}

私はまだこのオプションを調査しているため、完全ではないことに気付くかもしれません。呼び出された関数名をログに記録し、ユーザーがその関数を呼び出す権利を持っているかどうかを確認できるように、トリガーされたイベントを取得する方法が見つかりませんでした。出来ますか?汚いハックでさえできます。

4

1 に答える 1