B.3. アプリケーションでのアクセスチェック

ユーザを認証できるようになったので、アプリケーションが、システムのログインスクリーン以外から侵入して、先ほど設計した“基本的な”顧客ディレクトリに入ろうとするユーザをはじくようにしてみましょう。

そのための一つの方法は、セッションをチェックしてはじく関数を AppController の中に作るというものです。

Example B.4. /app/app_controller.php

<?php
class AppController extends Controller
{
    function checkSession()
    {
        // もしセッション情報が設定されていないなら...
        if (!$this->Session->check('User'))
        {
            // ログインを強制
            $this->redirect('/users/login');
        }
    }
}
?>

ユーザがログインなしでコントローラアクションにアクセスしようと試みているかをどのコントローラからでも確かめる関数ができました。これが組み込まれると、どの場所からでもアクセスをチェックできるようになります。これは幾つかの例です:

B.5. controller のすべてのアクションの前に認証を行わせる

<?php
class NotesController extends AppController
{
    // 認証を通っていないユーザには、このコントローラのどのアクションへのアクセスをも
    // 許可しないことにする、という場合には、beforeFilter を使えば、
    // すべてのアクションロジックの前に checkSession を実行できます。

    function beforeFilter()
    {
        $this->checkSession();
    }
}
?>

例 B.6. 単一の controller アクションの前に認証を行わせる

<?php
class NotesController extends AppController
{
    function publicNotes($clientID)
    {
        // このアクションには認証を受けていないユーザもアクセス可能(パブリックなアクセス)...
    }

    function edit($noteId)
    {
        // しかし、このアクションは、認証を受けたユーザだけがアクセス可能。
        $this->checkSession();
    }
}
?>

これで基礎は終わりです。独自のシステムを作って、ここで作ったものより、さらに高度な、またはカスタマイズした機能を実装したいと思うかもしれません。 Cake の ACL コンポーネントの統合などは、はじめの一歩としてよいかもしれません。