基本的なカスタマイズ > ユーザーインタフェースのカスタマイズ > UI の情報の表示 > UI の検証 > ソリューション > その他のヒント、コツ、避けるべきこと > アクセス許可の使い方
  
アクセス許可の使い方
UIValidationCriteria には、アクセス許可の保存に使用できる属性があります。アクセス許可は、1 つのバリデータまたはフィルタによって読み込まれ、後続のバリデータまたはフィルタで使用されます。たとえば、actionA、actionB、actionC があり、すべて操作モデルが同じで、ユーザーが現在のコンテナで修正アクセス許可を持っているかどうかを確かめる必要があるとします。actionA のバリデータまたはフィルタを最初に呼び出した場合、AccessControlManager にアクセス許可を照会し、それを UIValidationCriteria に保存します。そうすれば、actionB と actionC のバリデータまたはフィルタは、同じ照会をもう一度実行する必要がありません。
通常、バリデータまたはフィルタでアクセス許可を確認する必要がある場合は、以下の手順を実行します。
新しい UIValidationCriteria.getCachedAccessPermissions() メソッドを呼び出して、アクセス許可がすでに UIValidationCriteria に保存されているかどうかを確認します。
getCachedAccessPermissions() が null 以外の値を返した場合は、そのアクセス許可を検証チェックで使用できます。
getCachedAccessPermissions() が null を返した場合は、AccessControlManager を照会し、必要なアクセス許可を取得します。次に setCachedAccessPermissions() メソッドを呼び出して、そのアクセス許可を後続のバリデータ用に UIValidationCriteria に保存します。
UIValidationCriteira の cachedAccessPermissions 属性の目的は、AccessControlManager.getPermissions() の結果を保存することです。
このため、バリデータまたはフィルタのコードは以下のように記述する必要があります。
// check to see if the access permissions have already been
calculated...
WTKeyedHashMap accessPermissions =
criteria.getCachedAccessPermissions();
// if the access permissions have not been calculated yet, get the
permissions and cache them for other
// validators to use
if (accessPermissions == null){
accessPermissions = AccessControlManager.getPermissions(...);
criteria.setCachedAccessPermissions(accessPermissions);
}
アクセス許可に関する追加の注意事項:
wt.access.AccessControlManager には、シングルおよびマルチオブジェクトバリエーションで使用可能な以下の API があります。
hasAccess - プリンシパルに指定したアクセス許可がある場合は true を、ない場合は false を返します。
checkAccess - プリンシパルに指定したアクセス許可がない場合は、NotAuthorizedException をスローし、監査目的のイベントを発生させます。
getPermissions - プリンシパルに付与されたアクセス許可セット (AccessPermissionSet) を返します。
hasAccess または getPermissions を使用して、ユーザーの権限を評価し、続行します (たとえば、UI 操作検証コードがユーザーの権限に基づいて操作を無効にするなど)。
ユーザーのアクセスを確認する 1 つの方法に、いずれかの hasAccess API を使用する方法があります。また、別の方法として、オブジェクトのアクセス許可の確認が必要なユーザーが 2 つの getPermissions API のうちの 1 つを呼び出すようにして、その結果を UIValidationCriteria に保存し、同じオブジェクトのアクセス許可の確認が必要なほかのバリデータが使用できるようにします (オブジェクトと現在のプリンシパルのドメイン、タイプ、状態が等しい場合)。この方法では、それぞれのアクセス許可チェックについて hasAccess を呼び出し、アクセス権限を評価する必要はありません。結果が保存されていなかったとしても、getPermissions API は、複数のアクセス許可をチェックする必要のあるバリデータの役に立ちます。AccessPermissionSet はコレクションで、指定したアクセス許可がセットに含まれるかどうかをチェックするメソッドを持ちます。
boolean includes(AccessPermission permission)
// Returns true if permissions in this set include rights for
the specified permission.
checkAccess API は、例外をエンドユーザーに伝える目的以外では、ユーザーが指定したアクセス許可を持つかどうかの確認に使用すべきではありません。NotAuthorizedException が取得され、アクセス権限不足によるユーザー操作の失敗という結果にならなかった場合は、例外の監査を無効にする必要があります。詳細については、Javadoc を参照してください。