ここでちょろっとふれたメンバシップフレームワーク。
ASP.NET2.0が用意するログイン管理のフレームワークです。
こいつに今日は挑戦してみた。
このフレームワークは、なかなかの優れもので、ログインコントロール(Login)やパスワード変更コントロール(ChangePassword)や新規アカウント登録コントロール(CreateUserWizard)、ログインユーザー名表示コントロール(LoginName)などのWebコントロール、ログイン情報をデータベースに保存するプロバイダ、ロールベースのセキュリティー管理などで構成されています。
下手すると、コントロールを貼り付けて、メニューの「Webサイト-ASP.NET構成」で表示される設定画面(Webページの管理画面になっている)からいくつか設定するだけで、コーディングなしにログイン、ログアウトなどの処理は実装できてしまいます。
ログイン情報の保存はデフォルトではSQL Serverに行います。メンバシップフレームワークを使うように設定すると、自動的にApp_Dataフォルダにログイン管理のDBが作成されます。ログインのコントロールなどは、このDBの情報を見て処理を行ってくれるわけです。
このログイン管理のDBをそのまま使って、ログインユーザーに関連する情報は別のテーブルに持たせてもいいのかもしれませんが、テーブル設計は別の人が担当したりするかもしれませんし、既存のDBにログイン管理のテーブルが存在しているかもしれません。
このような場合も、カスタムのメンバシップ プロバイダを作成することで、独自のテーブルからログイン情報を持ってくるようにも出来ます。
また、SQL Server以外のDB(たとえばOracle)にログイン情報のテーブルを持たせたりすることもできます。
カスタムメンバシッププロバイダは、MembershipProviderを継承して、複数のメソッドをオーバーライドして作成します。
その後Web.configにこのクラスを登録すればOKです。
継承するクラスには、引数にIDとパスワードが渡されるので、それが正しいかSELECTかけて確認し結果を返すメソッドとか、古いパスワードと新しいパスワードが引数でわたってくるので、問題なければDBを新しいパスワードにUPDATEするメソッドとか、ログインIDが引数で渡されるので、そのユーザーのログイン名をDBからSELECTして戻り値で返すメソッド
とかを自分で作るわけです。
そうすると、ログインコントロールがこれらのメソッドをしかるべきタイミングで勝手に呼び出して処理してくれます。
自分がメソッドを呼び出すのではなく、自分が作ったメソッドが呼び出される、という動きが、まさにフレームワーク的!
前述のASP.NET構成のメニューでも、ユーザーの追加や更新などが行えるのですが、これも自作したプロバイダ経由で行われます。
逆に見れば、このメンテナンス用のツールの機能をコントロール化したのが、CreateUserWizardコントロールやChangePasswordコントロールなわけです。
ただ、実装するメソッドの数が結構多いんですな。実は自分もまだちゃんと実装できてない。
まぁ、全部作らなくても、使わない機能は適当な結果を返すメソッドや、例外を起こすだけにしてもいいのでしょうけどね。
でも、これ実装するだけでログインコントロールなどがそのまま使えるのは助かるし、SQLでデータ問い合わせしていところを変えるだけで他でも使えそうなので、一度作っておきたいところ。
以下のヘルプにいろいろ書いてあるので、実装する人は参考にするといいかも。俺もこのサンプルのSQL Server版を作成している。
メンバシップ プロバイダの実装
http://msdn2.microsoft.com/ja-jp/library/44w5aswa.aspx
サンプル↓
http://msdn2.microsoft.com/ja-jp/library/6tc47t75.aspx
あと、ロールベースのセキュリティー設定はフォルダ毎のWeb.configにかかれているようです。
ASP.NET構成のメニューで設定するとWeb.configが書き換わっていきます。
今日の調査で、コントロールとDB、セキュリティー設定とWeb.configとASP.NET構成。これらの関係がだいたいつかめてきました。