.NET TIPS

[ASP.NET]LoginViewコントロールでロール単位に表示を切り替えるには?[2.0、3.0、3.5、C#、VB]

山田 祥寛
2008/02/21

 「TIPS:[ASP.NET]セキュリティ・コントロールでログイン機能を作成するには?」で紹介したように、ASP.NET 2.0以降ではユーザー/アクセス管理にかかわるユーザー・インターフェイスを作成するために、「ログイン・コントロール」と呼ばれる多くのサーバ・コントロールを提供している。

 LoginViewコントロールは、そのログイン・コントロールに属する代表的なコントロールの1つで、ログイン・ユーザーが所属するロール(=役割)に応じて、表示するビューを切り替えるためのコントロールだ。次の画面はその実行例。

LoginViewコントロールでロールごとに表示を切り替え
上は未ログイン・ユーザーがアクセスした場合、下はAdminロールを持つユーザーがアクセスした場合。

 従来、ASP.NET 1.xでこのような機能を実現するには、アプリケーション側でIPrincipal.IsInRoleメソッドにより判定してページを分岐するなどの処理が必要であったわけであるが、LoginViewコントロールの登場によって、こうした判定から表示の分岐までをすべてコーディングレスで行うことが可能になる。

 それではさっそく、LoginViewコントロール利用のための具体的な手順を見ていくことにしよう。本稿のサンプルでは、それぞれ

  • Adminロールを持つユーザー
  • Adminロールを持たないログイン済みユーザー
  • 未ログイン・ユーザー

のために異なるビューを用意し、それぞれユーザーの種類によってビューを切り替えられるものとする。

1. 新規のWebフォームを作成する

 新規のWebフォーム(LoginView.aspx)を作成したら、フォーム・デザイナから以下の画面の要領でLoginViewコントロールを配置する。

Webフォーム(LoginView.aspx)のフォーム・レイアウト
以下のコントロールを配置する。
  LoginViewコントロール(view)。

2. LoginViewコントロールで利用可能なロールを定義する

 LoginViewコントロールでロール単位のビューの切り替えを行うには、あらかじめ切り替えのキーとなるロール情報を定義しておく必要がある。

ロール情報を定義するには、LoginViewコントロール右肩のタスク・メニューから[RoleGroupsの編集]を選択すればよい。すると下の画面のような[RoleGroupコレクションエディタ]ダイアログが開く。

[RoleGroupコレクションエディタ]ダイアログ

 [RoleGroupコレクションエディタ]ダイアログ左下の[追加]ボタンからRoleGroupオブジェクト(=登録ロールを表すオブジェクト)を追加したうえで、右のプロパティ・シートからRolesプロパティに「Admin」と入力する(もしも1つのビューに複数のロールを紐づけたい場合には、「Admin, User」のようにカンマ区切りでロール名を記述すればよい*

* それぞれのロールごとに異なるビューを割り当てる場合には、複数のRoleGroupオブジェクトを作成すること。

[注意]RoleGroupオブジェクトにロールを追加する際の注意点

 Rolesプロパティ右側の[...]から起動できる[文字列コレクションエディタ]ダイアログでロールを編集する場合は、(カンマ区切りではなく)改行区切りで入力する必要があるので、要注意だ。

(Rolesプロパティ右側の[...]ボタンをクリック)
[文字列コレクションエディタ]ダイアログ
[文字列コレクションエディタ]ダイアログから複数のロールを入力する場合は改行区切り。改行区切りのロールは、自動的にカンマ区切りの形式に編集される。

 改行区切りで入力されたロール名は、[RoleGroupコレクションエディタ]ダイアログに戻る時に、自動的にカンマ区切りに編集される。

3. ロール単位のビューを定義する

 あとは、ロール(ユーザー)単位のビューを定義するだけだ。この時点で定義できるビューは、以下の表のとおりだ。

ビュー名 概要
AnonymousTemplate 未ログイン・ユーザーに対して表示されるビュー
LoggedInTemplate ログイン済みユーザーに対して表示されるビュー
RoleGroup[0] - Admin Adminロールのユーザーに対して表示されるビュー
LoginViewコントロールでこの時点で定義できるビュー

 このうち、AnonymousTemplate/LoggedInTemplateビューはデフォルトで用意されているビューで、利用に当たって特別な準備は必要ない。つまり、2の手順はロール単位のビューを定義する場合にのみ必要であるということだ。

 さて、ここではそれぞれのビューに対して、以下のようなコンテンツを入力しておこう。本サンプルでは取りあえずテキストだけを入力しているが、もちろん、通常のページと同様、サーバ・コントロールやユーザー・コントロールを含んだコンテンツを定義することも可能だ。

【AnonymousTemplateビュー】
【LoggedInTemplateビュー】
【RoleGroup[0] - Adminビュー】
AnonymousTemplate/LoggedInTemplate/RoleGroup[0] - Adminビュー
ユーザーのログイン状態、保有するロールに応じて、ビューを定義する。

 以上でLoginViewコントロールを利用するための準備は完了だ。なお、本サンプルを実行するに当たっては、先にAdmin/Userロールを持つユーザーを作成しておく必要がある(実際にはUserロールは異なる名前でも構わない)。ユーザー/ロールを定義する方法については、「TIPS:[ASP.NET]セキュリティ・コントロールでログイン機能を作成するには?」をご参照いただきたい。

 まず未ログイン状態でページにアクセスすると、「あなたはログインしていません。」というメッセージが、次にAdmin/Userロールを持つユーザーでログインすると、それぞれ「あなたはAdminユーザーです。」「あなたは一般ユーザーです。」というメッセージが表示されることを確認してほしい。

 この結果からも、LoginViewコントロールでは

特定のロールに関連付けられたビューが存在する場合は、そのビューがLoggedInTemplateビューに優先する

ことが理解できるはずだ。

 また、カレント・ユーザーが複数のロール(例えばAdminロールとUserロール)に属しており、かつ、LoginViewコントロールの側でもAdminビューとUserビューとが定義されている場合には、先に定義されたビュー(つまり、[RoleGroupコレクションエディタ]ダイアログで上に記述されたビュー)が優先して適用される。

 つまり、LoginViewコントロールで定義された複数のビューに、ユーザーの条件が合致した場合にも、複数のビューが同時に表示されることはないというわけだ。注意してほしい。End of Article

利用可能バージョン:.NET Framework 2.0
利用可能バージョン:.NET Framework 3.0
利用可能バージョン:.NET Framework 3.5
カテゴリ:Webフォーム 処理対象:ASP.NET AJAX
使用ライブラリ:LoginViewコントロール
関連TIPS:[ASP.NET]セキュリティ・コントロールでログイン機能を作成するには?

この記事と関連性の高い別の.NET TIPS
[ASP.NET]Webパーツでログイン・ユーザーごとに表示可能なパーツを判定するには?
[ASP.NET]最初から[並べて表示]ビューで表示するには?
[ASP.NET]MultiView/Viewコントロールでマルチビューのページを作成するには?
[ASP.NET]TabStrip+MultiPageコントロールでマルチページを作成するには?
[ASP.NET][ソース]/[デザイン]ビューを左右に並べて表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間