チュートリアル : ロールによる Web サイトユーザーの管理
更新 : 2007 年 11 月
多くの ASP.NET アプリケーションでは、メンバシップを使用してユーザーを認証し、ユーザーがメンバ専用ページのような制限付きリソースにアクセスできるようにします。アプリケーションで多数のユーザーをサポートする場合、またはユーザーの一覧が時間と共に変化する場合は、ユーザー アクセスを管理するロールの作成を検討してください。ロールは、管理者、営業、メンバなどのグループ名です。ロールを確立すると、個別のユーザーをロールに割り当てることができます。その後で、ロールにアクセス許可を付与できます。同じロール内のすべてのユーザーは、割り当てられたアクセス許可を継承します。そのため、ロールを使用すると、ユーザー グループのアクセス許可を効率的に管理できます。
このチュートリアルでは、次の作業を行う方法について説明します。
アプリケーションのロールを確立します。
ユーザーをロールに割り当てます。
ユーザーに応じてページへのアクセスを選択的に許可または拒否するルール (アクセス許可) を作成します。
ユーザーが特定のロールに割り当てられているか、および現在のユーザーに割り当てられているロールはどれかをプログラムで判断します。
前提条件
このチュートリアルを実行するための要件は次のとおりです。
Visual Studio
.NET Framework
コンピュータにローカルにインストールされた IIS
使用するコンピュータにローカルにインストールされた SQL Server Express Edition
各ユーザーを識別する方法
メモ : 実行用アプリケーションでは、ユーザーをさまざまな方法で識別できます。たとえば、ユーザーの Windows ユーザー アカウントを使用します。ただし、このチュートリアルでは、サイトへのユーザーのログインによってユーザーを識別します。そのため、ASP.NET メンバシップを使用するようにサイトを設定する必要があります。メンバシップを使用して既に ASP.NET Web サイトを設定している場合は、このチュートリアルの開始点としてそのサイトを使用できます。
Web サイト、メンバシップ、およびロールの設定
ASP.NET のロールについて作業する前に、Web サイトを使用可能にし、メンバシップを有効化するようにそのサイトを設定して、ユーザー ロールを設定します。「チュートリアル : メンバシップとユーザー ログインを使用する Web サイトの作成」トピックの作業を実行済みの場合は、そのチュートリアルで設定した Web サイトを使用できます。
使用可能な Web サイトがない場合は、次の手順を実行して使用可能な Web サイトを作成します。それ以外の場合は、次のセクション「メンバ専用ページ用フォルダの作成」に進みます。
ローカル IIS Web サイトを作成するには
Visual Studio を開きます。
[ファイル] メニューの [新しい Web サイト] をクリックします。
[新しい Web サイト] ダイアログ ボックスが表示されます。
[Visual Studio にインストールされたテンプレート] の [ASP.NET Web サイト] をクリックします。
[場所] ボックスの [ファイル システム] をクリックします。
[参照] をクリックし、アプリケーションのディレクトリ (C:\RolesWebSite など) をクリックします。
[Languages] ボックスで、作業に使用するプログラミング言語をクリックします。
選択したプログラミング言語は Web サイトでの既定として設定されます。ただし、プログラミング言語をページごとに設定することもできます。
[新しい Web サイト] ダイアログ ボックスの [OK] をクリックします。
Visual Web Developer により Web サイトが作成され、Default.aspx という名前の新しいページが作成されます。
メンバ専用ページ用フォルダの作成
ロールを操作するには、アクセスが制限されたページを保存する 2 つのフォルダ (MemberPages フォルダと GuestPages フォルダ) を作成する必要があります。
メモ : |
---|
メンバシップに関するチュートリアルで使用した Web サイトを再使用する場合は、このフォルダは既に作成されています。その場合は、次の手順 1 をスキップできます。 |
制限付きアクセス用フォルダを作成するには
ソリューション エクスフローラで Web サイトのルートを右クリックし、[新しいフォルダ] をクリックして、そのフォルダに MemberPages という名前を付けます。
このフォルダには、一部のユーザーだけがアクセスできるページを格納します。
Web サイトのルートを右クリックし、[新しいフォルダ] をクリックして、そのフォルダに GuestPages という名前を付けます。
このフォルダには、ログイン済みユーザー (匿名ユーザーを除く) がアクセスできるページを格納します。
メンバシップとロール用の Web サイトの設定
基本の Web サイトを作成した後で、メンバシップとロールを使用するようにその Web サイトを設定します。
メンバシップとロール用の Web サイトを設定するには
[Web サイト] メニューの [ASP.NET の構成] をクリックします。
[セキュリティ] タブをクリックし、[手順に従ってセキュリティを構成するには、セキュリティ設定ウィザードを使用してください。] へのリンクをクリックして、[次へ] をクリックします。
ウィザードの手順 2 に進み、[インターネットから] オプションをクリックします。
このウィザードには、Web サイトで使用する認証方法を選択できるページが表示されます。
このオプションでは、アプリケーションでフォームによる認証を使用するように指定します。この場合、ユーザーは、このチュートリアルで後ほど作成するログイン ページを使用してアプリケーションにログインします。
[次へ] をクリックします。
[プロバイダの詳細設定] を使用してユーザー情報を格納することを示すメッセージが表示されます。アプリケーションでは、既定のプロバイダを使用します。このプロバイダでは、Web サイトの App_Data フォルダにある SQL Server Express Edition データベース ファイルに、メンバシップ情報を格納します。
もう一度 [次へ] をクリックします。
[ステップ 4: ロールの定義] の [この Web サイトにロールを有効化します。] チェックボックスをオンにし、[次へ] をクリックします。
プロンプトが表示されたら、2 つのロール (members と guests) を作成し、[次へ] をクリックします。
[ステップ 5: 新しいユーザーの追加] で、3 つのユーザー名 (member1、guest1、memberGuest) を作成します。
任意の厳密なパスワードを割り当てることができますが、これらのパスワードを必ず記憶しておいてください。パスワードは最低 7 文字で、少なくとも 1 文字はアルファベット以外の文字にします。電子メール アドレスについては、独自のアドレスを使用します (このチュートリアルでは電子メールを送信しません)。
メモ : Web サイト管理ツールをまだ閉じないでください。
作成する Web サイトでは、ユーザーがそれぞれのロールに応じて別のページにアクセスできるようにします。そのため、各ロールがアクセスできるフォルダを判断するためのアクセス ルールを作成する必要があります。
サイトのフォルダに関するアクセス ルールを設定するには
Web サイト管理ツールのセキュリティ ウィザードで [次へ] をクリックします。
[ステップ 6: 新しいアクセス規則の追加] には、各ロール (ユーザー) がアクセスできる Web サイトのページを判断するためルールを作成できるページが表示されます。
[この規則のディレクトリの選択] でルート ノードを展開し、[GuestPages] をクリックします。
[適用する規則] の下の [匿名ユーザー] をクリックします。
[アクセス許可] の下の [拒否] をクリックします。
作成中のルールでは、匿名ユーザー (ログインしていないユーザー) のアクセスを拒否します。
[この規則の追加] をクリックします。
新しいルールがページ下部のグリッドに表示されます。ユーザーが [GuestPages] ディレクトリのページを要求すると、このルールが上から下に順に適用され、そのユーザーがそのページにアクセスできるかどうかが判断されます。ユーザーがログインしていない場合、このフォルダ内のページは表示されません。
[この規則のディレクトリの選択] の下の [MemberPages] をクリックします。
[適用する規則] の下の [ロール] をクリックし、そのドロップダウン リストの [メンバ] をクリックします。
[アクセス許可] の下の [許可] をクリックします。
作成中のルールでは、[メンバ] ロール内のすべてのユーザーに対して [MemberPages] フォルダへのアクセス許可を付与します。
[この規則の追加] をクリックします。
[この規則のディレクトリの選択] の下の [MemberPages] をクリックします。
[適用する規則] の下の [すべてのユーザー] をクリックします。
[アクセス許可] の下の [拒否] をクリックします。
[この規則の追加] をクリックします。
[MemberPages] フォルダの 2 つ目のルールでは、[メンバ] ロール内のユーザー以外がこのフォルダにアクセスできないようにします。これらのルールは、グリッドに表示している順に上から下に処理されます。
最初のルール (許可) では、members という名前のロール内のユーザーにアクセスを許可します。2 つ目のルール (拒否) では、他のすべてのユーザーのアクセスを拒否します。アプリケーションに必要な数だけ許可ルールと拒否ルールを作成できます。ユーザーが [MemberPages] ディレクトリのページを要求すると、このルールが上から下に順に適用され、そのユーザーがそのページにアクセスできるかどうかが判断されます。
[完了] をクリックして [セキュリティ] タブに戻ります。
メモ : Web サイト管理ツールをまだ閉じないでください。
ロールへのユーザーの割り当て
もう 1 つの設定手順として、作成したユーザーをロールに割り当てる必要があります。
ユーザーをロールに割り当てるには
Web サイト管理ツールの [セキュリティ] タブの [ユーザー] の下の [ユーザーの管理] をクリックします。
[guest1] の行の [ロールの編集] をクリックします。
[ロール] ボックスに使用可能なロールのリストが表示されます。
[guests] チェック ボックスをオンにして、ユーザー [guest1] をロール [guests] に割り当てます。
[member1] の行の [ロールの編集] をクリックして、ユーザー member1 をロール members に割り当てます。
同じ方法で、ユーザー memberGuest を guests ロールと members ロールに割り当てます。
Web サイト管理ツールを閉じてから、次の操作を行います。
ソリューション エクスプローラで、更新アイコンをクリックします。
[Web サイト] メニューの [ASP.NET の構成] をクリックして、Web サイト管理ツールを再起動します。
これにより、Web サイト管理ツールで使用していたメンバシップ データベースへの接続が切断されたことを確認できます。
Web サイト管理ツールを、もう一度閉じます。
アクセス制限付きページの追加
メンバシップとロールの設定をテストするには、ログインさせたユーザーを識別する方法を作成する必要があります。作成したアクセス ルールをテストできる Web ページも作成する必要があります。
すべてのユーザーに対する既定のページを作成するには
Visual Studio に切り替えます。
Default.aspx ページを開くか、Default.aspx ページに切り替えて、[デザイン] ビューに切り替えます。
Default.aspx ページがない場合は、使用する Web サイトのルートにこのページを追加します。
メモ : ページの名前を必ず Default.aspx にしてください。この名前は、このチュートリアルで使用します。
"Welcome!" のような見出しテキストを追加します。
ツールボックスの [ログイン] グループから LoginStatus コントロールをページにドラッグします。
ログインしていないユーザーが LoginStatus コントロールをクリックすると、このユーザーは Login.aspx ページに移動します。
ツールボックスの [ログイン] グループから、LoginName コントロールをページにドラッグします。FormatString プロパティを "Hello {0}" に設定します。
ユーザーがログイン済みの場合、LoginName コントロールはそのユーザーの名前を表示します。
ツールボックスの [標準] グループから HyperLink コントロールをページにドラッグします。HyperLink コントロールの [プロパティ] パネルで、Text プロパティを Guests and Members に設定し、href プロパティを ~/GuestPages/Guests.aspx に設定します。
メモ : Guests.aspx ページは、このチュートリアルで後ほど作成します。
ツールボックスの [標準] グループから、別の HyperLink コントロールをページにドラッグします。HyperLink コントロールの [プロパティ] パネルで、Text プロパティを Members に設定し、href プロパティを ~/MemberPages/Members.aspx に設定します。
メモ : Members.aspx ページは、このチュートリアルで後ほど作成します。
これで、すべてのユーザーがアクセスできるホーム ページが作成されました。ユーザーは、制限付きページなどの別のページにここから移動できます。次の手順では、簡単なログイン ページを作成します。
ログイン ページを作成するには
ソリューション エクスプローラで、Web サイトのルート フォルダを右クリックし、[新しい項目の追加] をクリックします。使用する Web サイトに Login.aspx という名前の Web フォームを追加します。
Login.aspx ページで [デザイン] ビューに切り替えます。
ツールボックスの [ログイン] グループから Login コントロールをページにドラッグします。
Login コントロールの [プロパティ] パネルで、DestinationPageUrl プロパティを ~/Default.aspx に設定します。
さらに、サイトの制限付きコンテンツを表すページを作成する必要があります。
制限付きページを作成するには
ソリューション エクスプローラで [GuestPages] フォルダをクリックし、[新しい項目の追加] をクリックして、Guests.aspx という名前の Web フォームをこのフォルダに追加します。
[デザイン] ビューに切り替えて、Guests.aspx ページに "Welcome to the Guests page!" のような見出しを追加します。
ツールボックスの [標準] グループから HyperLink コントロールをページにドラッグします。HyperLink コントロールの [プロパティ] パネルで、Text プロパティを Home に設定し、href プロパティを ~/Default.aspx に設定します。
ソリューション エクスプローラで [MemberPages] フォルダをクリックし、[新しい項目の追加] をクリックして、Members.aspx という名前の Web フォームを追加します。
[デザイン] ビューに切り替えて、Members.aspx ページに "Welcome to the Members page!" のような見出しを追加します。
ツールボックスの [標準] グループから HyperLink コントロールをページにドラッグします。
HyperLink コントロールの [プロパティ] パネルで、Text プロパティを Home に設定し、href プロパティを ~/Default.aspx に設定します。
ページへのアクセスを制限するためにページにコードを追加する必要はありません。これらのページはアクセス ルールで保護されたフォルダ内に存在するため、アクセスが制限されます。
ロールのテスト
この段階で、使用するサイトをテストできます。
ロールをテストするには
Default.aspx ページに切り替え、CTRL+F5 キーを押して実行します。
[Guests and Members] をクリックします。
匿名ユーザーがアクセスできないページにアクセスしようとしているため、Login.aspx ページにリダイレクトされます。
[guests] のロール内にある guest1 としてログインします。
ログインが成功すると、Guests.aspx ページにリダイレクトされます。
[ホーム] をクリックして Default.aspx ページに戻ります。
Default.aspx ページに LoginName コントロールを設定した "Hello, guest1" が表示されます。また、guest1 としてログインしたため、LoginStatus コントロールによってテキスト"Login" が "Logout" に変更されています。
[Guests and Members] をクリックします。
今回は、ロール "guests" のユーザーとしてログイン済みであるため、Guests.aspx ページに直接移動します。
[ホーム] をクリックして Default.aspx ページに戻ります。
[メンバ] をクリックします。
guest1 には Members.aspx ページへのアクセス許可がないため、Login.aspx ページにリダイレクトされます。
member1 または memberGuest としてログインします。
[メンバ] ロールのユーザーとしてログインしているので、Members.aspx ページにリダイレクトされます。
[ホーム] をクリックして Default.aspx ページに戻ります。
このページには、新しいログイン名が反映されています。
次の手順
このチュートリアルでは、ASP.NET のロール管理の基本機能を説明しています。ロール管理の他の機能も試すことができます。たとえば、次の場合です。
メンバシップ システムで作成するカスタム ロールの代わりに Windows のロールを使用します。
ロールをプログラムで操作します。詳細については、「ロールを使用した承認の管理」を参照してください。
または、メンバシップやロールの情報について既存またはカスタムのデータ ストアを使用するカスタム プロバイダを作成できます。詳細については、「ロール プロバイダの実装」を参照してください。
使用する Web サイトのナビゲーション構造に表示されるリンクにアクセス ルールを適用します。詳細については、「チュートリアル : セキュリティ ロールに基づくサイトマップ ノードのフィルタ処理」を参照してください。
参照
処理手順
チュートリアル : メンバシップとユーザー ログインを使用する Web サイトの作成
チュートリアル : セキュリティ ロールに基づくサイトマップ ノードのフィルタ処理