メニュー

ドキュメント

リンク

PHP プロジェクト

Seasar.PHP

Sandbox.PHP

概要

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

「認証」とは、システムにアクセスしているユーザーが誰であるかの識別と特定を行う機能です。
認証を行うことで、対象物へのユーザーの権限を適切に判断することができます。

S2AnA.PHP5は個々のアプリケーションで認証した情報に対して、S2AnA_AuthenticationContextインタフェースを通じてアクセスします。
S2AnA.PHP5自体がユーザーを認証する機構を持つわけではないことに注意してください。

S2AnA.PHP5の認証(Authentication)機能

S2AnA_AuthenticationContextインタフェース

S2AnA.PHP5は各アプリケーションの認証情報に対してS2AnA_AuthenticationContextインタフェースを通じてアクセスします。
このインタフェースは以下のメソッドを持ちます。

  • getUserPrincipal()
  • isAuthenticated()
  • isUserInRole($roleName)
S2AnA_AuthenticationContextインタフェースを実装したクラスをコンポーネント登録することで、承認機能を使用することが可能になります。

diconファイルへの記述例
 <component name="authenticationContext" class="S2AnA_AuthenticationContextImpl">

S2AnA_AuthenticationContextResolverインタフェース

承認機能において、S2AnA_AuthenticationContextインタフェースの実装クラスをコンテナから取得する際に、S2AnA_AuthenticationContextResolverインタフェースを経由します。 このインタフェースは以下のメソッドを持ちます。

  • resolve()
S2AnA.PHP5ではデフォルトの実装としてS2AnA_AuthenticationContextResolverImplクラスが用意されています。
よって、通常はこのインタフェースの実装を定義することはないでしょう。

※ デフォルトの実装はコンポーネントを"authenticationContext"決め打ちで取得するので、diconファイルへの記述に注意してください。

S2AnA_AuthenticationContextインタフェースを実装する

S2AnA_AuthenticationContextインタフェースのの簡単な実装例を以下に示します。
※ あくまで実装例です。
※ AuthManagerというクラスはS2AnA.PHP5には用意されていません。

<?php

class ExampleAuthenticationContext implements S2AnA_AuthenticationCotext
{
    public function getUserPrincipal()
    {
        return AuthManager::getLoginUser();
    }

    public function isAuthenticated()
    {
        $authenticated = FALSE;
        
        $user = $this->getUserPrincipal();
        if ($user !== NULL) {
            $authenticated = TRUE;
        }
        return $authenticated;
    }
    
    public function isUserInRole($roleName)
    {
        $user = $this->getUserPrincipal();
        if ($user === NULL) {
            return FALSE;
        }
        $roles = $user->getRoles();
        if (!in_array($role, $roles)) {
            return FALSE;
        }
        return TRUE;
    }
}

?>
注意すべき点は、承認機能は対象コンポーネントへのアクセスがあるたびにこれらメソッドを実行する点です。
これはパフォーマンス上の問題を引き起こす可能性があります。
将来的にはキャッシュ機構などの導入を検討しようと思っています。