メニュー

ドキュメント

リンク

PHP プロジェクト

Seasar.PHP

Sandbox.PHP

概要

S2AnA.PHP5における「承認」とは

「承認」とは、ユーザが対象物に対してアクセスする権限があるかどうかを調べ、アクセスを許可あるいは拒否する機能です。
S2AnA.PHP5では、S2ContainerのAOP機構を使って承認機能を実現します。

S2AnA.PHP5の承認(Authentication)機能

承認Interceptor

S2AnA.PHP5では承認機能を実現するために以下のInterceptorを用意しています。

  • S2AnA_AuthenticatedAccessOnlyInterceptor
  • S2AnA_AllowInterceptor
  • S2AnA_DenyInterceptor
これらの承認InterceptorにはAuthenticationContextがInjectされます。

S2AnA_AuthenticatedAccessOnlyInterceptor

「認証されているかどうか」をチェックするInterceptorです。
InjectされているAuthenticationContextのisAuthenticatedメソッドを使用して、既に認証が行われているかどうかをチェックします。
AuthenticationContext::isAuthenticatedがfalseを返した場合、S2AnA_NotAuthenticatedExceptionを投げます。
この例外をcatchしたらログイン画面へリダイレクトするのが典型的な使用例となります。

diconファイルへの記述例

 <component name="requireLogin" class="S2AnA_AuthenticatedAccessOnlyInterceptor" />
S2AnA.PHP5パッケージに付属のana.diconに、同様のコンポーネント定義が登録されています。

S2AnA_AllowInterceptor, S2AnA_DenyInterceptor

指定されたロールに属しているかをチェックするInterceptorです。
InjectされているAuthenticationContextのisUserInRoleメソッドを使用して、アクセスしているユーザが指定されたロールに属しているかどうかをチェックします。

  • S2AnA_AllowInterceptorは指定されたロールに属しているユーザのアクセスのみを許可します
  • S2AnA_DenyInterceptorは指定されたロールに属しているユーザのアクセスを拒否します
S2AnA_AllowInterceptorにアクセスが許可されなかったかS2AnA_DenyInterceptorにアクセスが拒否された場合には、
S2AnA_AccessDeniedExceptionが投げられます。

diconファイルへの記述例:単一のロールを指定する
 <component name="roleA" class="S2AnA_AuthenticatedAccessOnlyInterceptor">
   <arg>"roleA"</arg>
 </component>


コンポーネントに承認機能をアスペクトする

承認機能を使用するためには、承認チェックを行いたいコンポーネントにaspectを指定します。
この例では、AuthComponentImplクラスへのメソッド呼び出しを認証必須にします。

 <include path="/path/to/ana.dicon">
 
 <component name="authComponent" class="AuthComponentImpl">
   <aspect>requireLogin</aspect>
 </component>
S2AnA_AuthenticatedAccessOnlyInterceptorはS2AnA_AuthenticationContextインタフェースを利用するので、その実装クラスをdiconに登録する必要があります。
付属のs2ana-context.diconを参照してください。
<component name="authenticationContext" class="S2AnA_NullAuthenticationContext" />
S2AnA_AuthenticationContextインタフェースの実装については、S2AnA_AuthenticationContextインタフェースを実装するを参照してください。