1

ユーザー認証とロール管理にそれぞれ Windows 認証と SqlRoleProvider を使用するアプリケーションがあります。デフォルトとしてデータベースに追加したテスト ユーザーで問題なく動作しています。このアプリケーションでは、ユーザーが (Windows 資格情報を使用して) ログインし、この内部アプリケーションを基本的な「ユーザー」として使用できるようにする必要があります。ユーザーを高レベルの役割に追加する必要がある場合、最初のログイン後に管理者がこれを担当します。

そうは言っても、ユーザーが最初にログインしたときに、ユーザーをデフォルトの役割に追加するにはどうすればよいですか? 論理的には、Roles.IsUserInRole() を呼び出して、そうでない場合は追加する必要があることはわかっています。しかし、どこでこれを行うのでしょうか? Global.asax で使用するイベントを見つけるのに問題があります。

ありがとう

編集: シナリオを少し拡張するために、接続文字列を web.config の外部に格納できるようにする新しいプロバイダーを作成する必要があるため、完全なメンバーシップ プロバイダー システムを使用していません。登録またはログイン ページの形式を使用せず、IIS の Windows 統合認証に認証の側面を処理させ、強化された SqlRoleProvider でユーザー ロールを管理します。ハードコードされたテストを介してロールをセットアップしたユーザーに対して、システムは正常に機能しています。新しいユーザー (IIS によって認証される) を追加して、既定の "ユーザー" ロールにすぐに追加する方法を探しています。見つけたと思います。ただし、現在、パフォーマンス上の理由から、リクエストごとに起動しないようにする方法を検討しています。

4

3 に答える 3

1

もう少し掘り下げて遊んだ後、解決策を見つけることができました。次のコードを Global.asax ファイルに追加したところ、期待どおりの結果が得られました。

protected void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs e)
{
    if (!Roles.IsUserInRole(e.Identity.Name, "Users"))
    {
        Roles.AddUsersToRole(new string[] { e.Identity.Name }, "Users");
    }
}

このコードはすべてのページ リクエストで実行されるため、心配です。これが発生したときに制限するより良い方法はありますか? Global.asax ではなく、ランディング ページの page_load イベントにこのコードを追加する必要がありますか?

于 2008-12-09T20:51:49.117 に答える
0

ログインや登録時に入れてみませんか?

ログイン時に、そのイベントを処理してこれを入れます。ログインするたびに確認してください。

于 2008-12-09T21:08:49.160 に答える
0

ユーザーがフェッチされた直後に、デフォルトのロールをユーザーに追加します。

そのようなもの:

user = Membership.GetUser()
if (user != null)
{
  // default role 
  string[] defaultRoles = {"MyRole"};

  AddUsersToRoles(user, defaultRoles); 

}
于 2008-12-09T20:23:23.277 に答える