3

ASP.NET Web アプリケーションのメンバーシップ/資格情報にASP.NET ログイン コントロールフォーム認証を使用しています。

私には 2 つの役割があります。

  • ユーザー
  • 管理者

ページを 4 つの異なるグループで表示できるようにします。

  • 全員(デフォルト、ヘルプ)
  • 匿名(CreateUser、Login、PasswordRecovery)
  • ユーザー(ChangePassword、DataEntry)
  • 管理者(レポート)

ASP.NET HOW DO I ビデオ シリーズ: メンバーシップとロールの例を拡張して、これらのページ ファイルを次のようなフォルダーに配置しました。

Visual Studio ソリューション エクスプローラー

また、ASP.NET Web サイト管理ツールを使用して、各フォルダーのアクセス ルールを設定しました。

それは機能しますが、私には不器用に思えます.Login.aspxがルートになく、Login.aspxのReturnUrlパラメータを使用している場合、問題が発生します.

これを行うより良い方法はありますか?フォルダ レベルではなくページ レベルでアクセス許可を設定できる簡単な方法はありますか?

4

3 に答える 3

1

私の頭のてっぺんからいくつかの解決策。

  1. web.configファイルの各ページに制限を設定できます。これにより、使用したいフォルダ階層を設定できます。ただし、ページを追加するときは常にweb.configファイルを最新の状態に保つ必要があります。フォルダ構造がアクセシビリティを決定することの良いところは、新しいページを追加するときにそれについて考える必要がないことです。
  2. ページにカスタムクラス(EveryonePage、UserPage、AdminPageなど)を継承させ、Page_Loadルーチンに役割チェックを入れます。
于 2008-08-28T20:26:50.980 に答える
1

私が過去に使用した1つの解決策はこれです:

  1. 「SecurePage」またはその効果のあるものと呼ばれるベースページを作成します。
  2. プロパティ「AllowedUserRoles」をベースページに追加します。これは、ユーザーロールリストまたはリストの汎用リストです。ここで、intはロールIDです。
  3. SecurePageを拡張するページのPage_Loadイベントで、許可された各ユーザーロールをAllowedUserrolesプロパティに追加します。
  4. ベースページでOnLoad()をオーバーライドし、現在のユーザーがAllowedUserRolesにリストされているロールの1つを持っているかどうかを確認します。

これにより、各ページを制御するためにweb.configに大量の情報を入力しなくても、各ページをカスタマイズできます。

于 2008-08-28T20:31:46.240 に答える
1

マスターページで、セキュリティチェックを切り替えるパブリックプロパティを定義します。デフォルトはtrueです。また、;である文字列を宣言します。そのページに必要な役割の区切りリスト。

マスターページのページ読み込みで、次のことを行います

if (_secure)
{
  if (Request.IsAuthenticated)
  {
    if (_role.Length > 0)
    {
      if (PortalSecurity.IsInRoles(_role))
      {
        return;
      }
      else
      {
        accessDenied = true;
      }
    }
    else
    {
      return;
    }
  }
}

//do whatever you wanna do to people who dont have access.. bump to a login page or whatever

また、あなたは置く必要があります

ページの上部にあるので、マスターページの拡張プロパティにアクセスできます

于 2008-08-28T20:51:53.867 に答える