ユーザを認証できるようになったので、アプリケーションが、システムのログインスクリーン以外から侵入して、先ほど設計した“基本的な”顧客ディレクトリに入ろうとするユーザをはじくようにしてみましょう。
そのための一つの方法は、セッションをチェックしてはじく関数を 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 コンポーネントの統合などは、はじめの一歩としてよいかもしれません。