15.6.8. パーミッションの承認モデル
Seam Security はアプリケーションに対するパーミッションの決定に対して拡張可能なフレームワークを提供します。下記のクラスダイアグラム図には、パーミッションフレームワークの主要コンポーネントの概要について示しています。
関連するクラスについての詳細を以下のセクションに示します。
15.6.8.1. PermissionResolver リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
個々のオブジェクトのパーミッションを解決するためのメソッドを提供するインターフェースです。 Seam は以下の組み込み
PermissionResolver の実装を提供しています。 詳細については本章の後半に記載します。
RuleBasedPermissionResolver− Drools を使ってルールベースのパーミッションチェックを解決します。PersistentPermissionResolver− リレーショナルデータベースなど永続的なストアにオブジェクトのパーミッションを保存します。
15.6.8.1.1. 独自の PermissionResolver の記述 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
独自のパーミッションリゾルバを実装するのは簡単です。 以下の表のように、
PermissionResolver インターフェースは実装しなければならない 2 種類のメソッドを定義します。 PermissionResolver を Seam プロジェクトにデプロイする場合、 デプロイ時に自動的にスキャンされてからデフォルトの ResolverChain で登録されます。
|
戻り値のタイプ
|
メソッド
|
詳細
|
|---|---|---|
boolean
| hasPermission(Object target, String action)
|
このメソッドは現在認証済みのユーザー (
Identity.getPrincipal() への呼び出しで取得) が target と action のパラメータで指定されるパーミッションを持っているかどうかを解決します。 ユーザーが指定パーミッションを持っている場合は true を、 持っていない場合は false を返します。
|
void
| filterSetByAction(Set<Object> targets, String action)
|
このメソッドは、 同じ
action パラメータ値を持つ hasPermission() メソッドに渡されると true を返す指定セットからオブジェクトを削除します。
|
注記
ユーザーのセッションにキャッシュされるため、
PermissionResolver の実装はいくつかの制約に順守していなければなりません。 まず、 セッションスコープより粒度の細かい状態は含むことはできず、 コンポーネント自体がアプリケーションスコープまたはセッションスコープのいずれかになるはずです。 次に複数のスレッドから同時にアクセスされる可能性があるため、依存インジェクションを使用してはいけません。 最適なパフォーマンスを得るには @BypassInterceptors アノテーションを付与して Seam のインターセプタスタックをすべて一緒に迂回することをお勧めします。