1) はじめに
ログイン機能(前編)では、権限情報とユーザの登録手順を解説してきました。
ここではチュートリアルで作成したメッセージ管理機能に権限を与えてみましょう。
2) セキュリティポリシー
Weberフレームワークによるユーザ認証は、アクション単位で行われます。
ユーザ認証が必要なアクションに対して、権限を付与することにより、
その権限をもつユーザにのみ、そのアクションを実行する権利が与えられます。
まずは、メッセージ管理機能に付与する権限から検討していきましょう。
今回のメッセージ管理機能のセキュリティポリシーを以下のようにしたいと思います。
| セキュリティポリシー | 利用可能なサービス | 権限付与の対象となるアクションクラス |
| guest/adminユーザが利用できるサービス | メッセージ登録、編集、照会 | MessageBaseAction( MessageDisplayRegistAction, MessageDisplayUpdateAction, MessageRegistAction, MessageUpdateAction, MessageSearchAction ) |
| adminユーザのみが利用できるサービス | メッセージ削除 | MessageDeleteAction |
まず、今回のセキュリティポリシーの基本概念として、guest権限以上のユーザでないと
メッセージ管理機能が利用できないこととします。
ただし、登録済みのメッセージを削除できるのはadmin権限をもつユーザのみとします。
権限の付与はこの後で説明しますが、各アクションクラスで設定します。
今回のように、ほとんどのアクションで共通の処理を行いたい場合、各モジュールのスーパークラス
である"モジュール名"+BaseActionクラスに処理を記述します。
今回は、MessageBaseActionクラスに"guest"権限と"admin"権限を設定し、 MessageDeleteActionクラスには"admin権限"のみを設定します。
3) 権限の設定
まずはMessageBaseActionの設定からはじめましょう。
必要な作業は、以下のメソッドを1つ追加するだけです。
MessageBaseActionクラスに権限を設定する
/**
* このアクションに必要な権限を登録します
*/
public void doInit(ActionBucket bucket){
addRole("guest");
addRole("admin");
}
doInit(ActionBucket bucket)メソッドは、ユーザ認証処理直前に呼ばれるメソッドで、この中に
addRoleメソッドを使って、権限を設定します。
ここで与えられた権限をもつユーザにのみ、このアクションを実行する権限が
与えられることになります。
逆に権限を何も指定しなければ、ユーザ認証は行われず、全てのユーザがこの
アクションを実行することができてしまいます。
次にMessageDeleteActionに権限を設定してみましょう。
必要な作業は、MessageBaseActionのときと同じです。
MessageDeleteActionクラスに権限を設定する
/**
* このアクションに必要な権限を登録します
*/
public void doInit(ActionBucket bucket){
addRole("admin");
}
次にMessageDeleteActionはadmin権限を持つユーザだけが実行することができます。
MessageBaseActionのdoInitメソッドをオーバーライドしているため、
guest権限のユーザは、このアクションを実行することはできません。
では、実際にソースをコンパイル、デプロイして、動作を確認してみましょう。
まず、ログインしていない状態で、INDEXページから"メッセージ登録"
を選択してみてください。
ログインしていない場合、何も権限が与えられていないため、以下のメッセージが
出力され、メッセージ登録画面に遷移できません。
次にguest権限をもつユーザにログインして、再度"メッセージ登録"を選択してみて
ください。
こんどは、ちゃんとメッセージ登録画面が表示され、メッセージ登録まで行うことが
できるはずです。
又、メッセージ登録画面の左ペインに現在ログイン中のユーザが表示されていることを
確認してください。
guestユーザは、メッセージの登録、更新、照会は利用できますが、メッセージを削除
することができません。
メッセージを削除するためには"admin"権限を持つユーザにログインする必要があります。
以上前編、後編にわたってユーザの登録、ユーザ認証の設定について解説してきました。
いかがです?WeberCreator+Weberを使うと、意外と簡単に実現できることが
実感されたのではないでしょうか?