6

一部のページで認証が必要なasp.net Webサイトプロジェクトを使用しています。私はasp.netメンバーシップを使用しています。

私はいくつかの答えを読みました。たとえば、これらのページをすべてフォルダーに作成し、特権を説明する内部 web.config を作成します。これは問題を解決する 1 つの方法ですが、より修正可能で効果的な方法が必要です。

4

2 に答える 2

20

これを web.config(s) にハード コードしたくない場合は、「ベース ページ」タイプのコントロールを実装する必要があります。

基本ページ クラスは System.Web.UI.Page から継承する必要があり、「ユーザーはログインしている必要があります」または「ユーザーはロール x にいる必要があります」と言うために呼び出すことができるメソッドが必要です。そのロールで、ログイン ページにリダイレクトします (これはFormsAuthentication.LoginUrlを呼び出すことで取得できます)。

実際のページは、System.Web.UI.Page から直接ではなく、このクラスから継承する必要があります。次に、Init などで、または Page_Load の先頭で呼び出します。

base.UserMustBeLoggedIn();

また

// Replace "AccessRole" with the name of your role
base.UserMustBeInRole("AccessRole");

ベースページにこれを処理させます。

アクセス権をデータベースに保存したい場合は、すべての処理をベース ページに移動し、ページ ライフサイクルの適切な場所で、データベース テーブルに対して現在の URL を確認し、ユーザーの役割/認証を確認します。要件に反して、必要に応じてリダイレクトします。


次のように、Web 構成でページレベルのセキュリティを作成できることに注意してください。

<configuration>
  <location path="LockedPage.aspx">
    <system.web>
      <authorization>
        <!-- Deny access to anonymous users -->
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>

詳細については、MSDN: The Location ElementおよびThe Authorization Elementを参照してください。

于 2009-01-25T12:13:02.490 に答える
3

このコードを試すことができます。マスター ページの読み込みイベントで、このコードを記述し、プロパティを追加します。

public bool m_bLoginRequired = true;

public bool IsLoginRequired
{
    get { return m_bLoginRequired; }
    set { m_bLoginRequired = value; }
}



try
        {
            // Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
            Response.Cache.SetNoStore();
            if (IsLoginRequired==true)
            {
                    if ( Session.IsNewSession  || HttpContext.Current.Session["Username"] == null)
                    {
                        FormsAuthentication.SignOut();
                        FormsAuthentication.RedirectToLoginPage("Session Expired");
                        Response.End();
                    }
                }
            }
        catch (Exception ex)
        {
            throw (ex);
        }

ログインページで、このコードを書く必要があります

FormsAuthentication.SetAuthCookie(this.txt_UserName.Text.Trim(), false);  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txt_UserName.Text.Trim(), DateTime.Now, DateTime.Now.AddMinutes(10), false, "HR");
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,  FormsAuthentication.Encrypt(ticket));
            cookie.Name = "jay";
            Session["UserName"] = txt_UserName.Text.Trim();
            Response.Cookies.Add(cookie);
            txt_UserName.Text = "";
            txt_Password.Text = "";
            Response.Redirect("HomePage2.aspx");

ログインページに pageinit イベントを追加する必要があります

protected void Page_PreInit(object sender, EventArgs e)
    {
        Master.IsLoginRequired = false; 
    }

ユーザーが許可されていないページにアクセスできるようにする場合は、そのページの pageinit イベントで

をセットするMaster.IsLoginRequired=false;

また、ファイルに loginurl を指定しweb.configます。

于 2009-03-20T13:26:04.313 に答える