特集:Visual Studio 2008&ASP.NET 3.5ASP.NETアプリ開発者のためのVisual Studio 2008新機能 Part IV山田祥寛(http://www.wings.msn.to/)2008/04/11 |
|
|
ロール・アクセスに対応したアプリケーションサービス・ブリッジ
ASP.NET AJAX Extensionsというと、UpdatePanel/UpdateProgressコントロールのようなサーバ・コントロールの方に目が向きがちであるが、忘れてならない重要な機能が「ブリッジ機能」だ。
ブリッジ機能とは、名前のとおり、ASP.NETのメンバシップ・フレームワークやXML Webサービスをクライアントサイド・スクリプトからアクセス可能にするための仲介役(=ブリッジ)となるものだ。
図2 ASP.NET AJAXのブリッジ機能の仕組み |
ブリッジ機能を利用することで、XMLHttpRequestオブジェクトなどの原始的な通信の手続きを意識することなく、クライアントサイドからサーバ上で定義されたメソッド(やサービス)を呼び出すことができる。UpdatePanelコントロールのような手軽さこそ損なわれるものの、その分、UpdatePanel固有の制約に悩まされることなく、かつ、アプリケーション固有の要件にも柔軟に対応しやすいというメリットがある。(当たり前のことではあるが)ASP.NET AJAXを利用する場合、UpdatePanelコントロールとブリッジ機能のいずれか片方を、というのではなく、それぞれの局面に応じて使い分けていくのが好ましい。
さて、そのブリッジ機能の中でも、ASP.NETが標準で提供するメンバシップ・フレームワークにアクセスする機能のことを「アプリケーションサービス・ブリッジ機能」と呼ぶ。ASP.NET AJAX 1.0(+ASP.NET 2.0)において、アプリケーションサービス・ブリッジ機能でアクセスできるのは認証/プロファイル情報に限られていたが、ASP.NET 3.5ではロール情報にもアクセスできるようになった。
以下に、ロール情報へのアクセスのための具体的な手順を見ていくことにしよう。ここで紹介するのはごくシンプルなサンプル――ユーザーが所属するロールに応じて、メッセージと背景色を切り替えるものだ。
図3 ユーザーが所属するロールに応じて、メッセージと背景色を切り替え |
上がadminロールを持つyyamadaユーザーでアクセスした場合、下がuserロールを持つnkakeyaユーザーでアクセスした場合。 |
なお、以前から提供されていたアプリケーションサービス・ブリッジ機能に関する詳細については、以下の別稿も併せて参照することをお勧めする。
- .NET TIPS:[ASP.NET AJAX]クライアントサイド・スクリプトからASP.NETの認証機能を利用するには?
- .NET TIPS:[ASP.NET AJAX]クライアントサイド・スクリプトからカスタムの認証機能を利用するには?
- .NET TIPS:[ASP.NET AJAX]クライアントサイド・スクリプトからASP.NETのプロファイル機能を利用するには?
[1]メンバシップ・フレームワークに関する設定を行う
繰り返しになるが、アプリケーションサービス・ブリッジ機能は、あくまでASP.NET標準のメンバシップ・フレームワークに対してクライアントサイド・スクリプト(JavaScript)からアクセスするための橋渡し(ブリッジ)役を務めるものにすぎない。つまり、アプリケーションサービス・ブリッジ機能による認証機能を利用するには、まずASP.NET側でメンバシップ・フレームワークを利用するための準備を済ませておく必要があるということだ。
メンバシップ・フレームワークを利用するための手順については、「.NET TIPS:[ASP.NET]セキュリティ・コントロールでログイン機能を作成するには?」が詳しいので、そちらを参照していただきたい。
本稿では、取りあえずadminロールに属するユーザー「yyamada」、userロールに属するユーザー「nkakeya」が用意されている前提で、以降の解説を進めていく。
[2]ASP.NET AJAXで認証サービスを有効にする
まず、ASP.NET AJAX上でアプリケーションサービス・ブリッジ(ロール・サービス)を利用できるよう、アプリケーション構成ファイル(Web.config)を編集する必要がある。
| |
リスト1 ASP.NET AJAXによるロール・アクセスを有効にするための設定(Web.config) | |
<roleService>要素によってロール・サービスの有効/無効を指定する。 |
ロール・サービスの有効/無効を決めるのは、<roleService>要素の役割であり、enabled属性にtrueを指定した場合、ロール・サービスは有効化される。
[3]新規のWebフォームを作成する
以上で、ASP.NET AJAX上で認証サービスを利用するための準備は完了だ。ここからは、具体的に認証を行うためのフォームを作成してみよう。
新規のWebフォーム(Role.aspx)を作成したら、フォーム・デザイナから以下の画面4の要領でコントロールを配置する。
図4 Role.aspxのフォーム・レイアウト | ||||||
|
ScriptManagerコントロールはASP.NET AJAXの動作に必要なJavaScriptライブラリを出力/管理するためのコントロール、<Div>タグは、クライアントサイド・スクリプトで生成したコンテンツを出力するための領域を定義するための要素である。
[4]ロール情報にアクセスするためのクライアントサイド・スクリプトを記述する
後は、ページ・ロード時に実行されるクライアントサイド・スクリプトを記述するだけだ。pageLoad関数は、Microsoft AJAX Libraryであらかじめ予約された関数の1つで、名前のとおり、ページ・ロード時に呼び出される処理を規定する。
| |
リスト2 ロール・アクセスのための処理を定義したJavaScriptのコード(Role.aspx) |
アプリケーションサービス・ブリッジ機能において、ASP.NETが提供するロール・サービスにアクセスするのは、Sys.Services.RoleServiceオブジェクトの役割だ。
RoleServiceオブジェクトはAJAX Libraryで提供されるJavaScriptのオブジェクトで、いわゆるロール情報へのアクセスに特化したプロキシ・クラスと思っていただいてもよいだろう(プロキシ・クラスについては、「.NET TIPS:[ASP.NET AJAX]クライアントサイド・スクリプトからXML Webサービスを非同期呼び出しするには?(クライアントサイド編)」を参照)。
以下に、RoleServiceオブジェクトで公開されているメンバをまとめておく。
| ||||||||||||||||||||||
Sys.Services.RoleServiceオブジェクトの主なメンバ | ||||||||||||||||||||||
[F]はフィールド、[P]はプロパティ、[M]はメソッド。プロパティを参照/設定するには、プロパティ名について直接ではなく、「オブジェクト名.get_プロパティ名()」「オブジェクト名.set_プロパティ名(設定値)」のように、アクセサ・メソッド経由でアクセスしなければならない点に注意。なお、IsUserInRoleメソッド、rolesプロパティにアクセスするには、あらかじめloadメソッドでロール情報を読み込んでおく必要がある。 |
pageLoad関数から呼び出されるloadメソッドの構文はやや複雑であるので、以下に詳しく示しておくことにしよう。
| |
RoleServiceオブジェクトのloadメソッドの構文 |
成功/例外コールバックやコンテキスト値などについては、「.NET TIPS:[ASP.NET AJAX]クライアントサイド・スクリプトからXML Webサービスを非同期呼び出しするには?(クライアントサイド編)」で紹介したとおりである。成功コールバックは、引数としてカレント・ユーザーのロール情報を受け取るので、ここではロールに応じて処理を分岐している(ロール情報の読み込みには、Sys.Services.RoleServiceオブジェクトのrolesプロパティを利用しても構わない)。
なお、ここでは簡略化のために、それぞれのユーザーが常に1つのロールにのみ属していることを前提にしているので、リスト2では配列rolesの0番目の要素を無条件に参照している。しかし、実際には1人のユーザーが複数のロールに属することもあり得るので、その場合には、引数として受け取った配列rolesの1番目以降の要素も確認する必要があるので、注意されたい。
以上で、ロール・サービスを利用するための手順は完了だ。作成したサンプル・プログラムを実行し、実際の動作を確かめてみよう。本節冒頭の図3のように、admin、userロールそれぞれのユーザーに応じて、表示されるメッセージと背景色とが切り替わっていれば成功である。
INDEX | ||
Visual Studio 2008&ASP.NET 3.5 | ||
ASP.NETアプリ開発者のためのVisual Studio 2008新機能 Part I | ||
1.JavaScriptサポートを大幅に強化 | ||
2.外部のJavaScriptライブラリやサービス・メソッドも認識可能 | ||
3.サービス・メソッドを利用する場合/自作ライブラリにもツール・ヒントを表示 | ||
4.機能強化されたJavaScriptのデバッグ機能 | ||
ASP.NETアプリ開発者のためのVisual Studio 2008新機能 Part II | ||
1.CSSサポートもますます使いやすく(1) | ||
2.CSSサポートもますます使いやすく(2) | ||
3.マルチターゲッティング機能/分割ビュー | ||
4.マスタ・ページのネスト機能/エクステンダ・ウィザード | ||
ASP.NETアプリ開発者のためのVisual Studio 2008新機能 Part III | ||
1.新しいデータアクセス・コントロール − ListViewコントロール −(1) | ||
2.新しいデータアクセス・コントロール − ListViewコントロール −(2) | ||
3.より柔軟なページャの配置を可能にする − DataPagerコントロール − | ||
4.ASP.NETページでLINQ機能を利用する − LinqDataSourceコントロール − | ||
ASP.NETアプリ開発者のためのVisual Studio 2008新機能 Part IV | ||
1.UpdatePanelコントロールの適用範囲が拡大 | ||
2.ロール・アクセスに対応したアプリケーションサービス・ブリッジ | ||
3.Webサービス・ブリッジがWCFをサポート | ||
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|