アクション毎に認証の要・不要を指定できるようにする

CakePHPの1.1系でブログを作ったときのコードを一部公開します。
Cakeでブログを作ったとき、同じコントローラの中でも、このアクションには認証を付け、あのアクションには認証を付けないでおこう、と思ったことがありました。例えば、ブログの記事を投稿する場合には認証を必要とし、記事を見る場合には認証を不要としたい場合などがそうです。

以下のコードはその時に考えたものです。特徴は

  • アクションごとに認証を行うか否かを指定できる
  • アクションが不要であると指定しないかぎりログインは必須とされるので、うっかり認証を付け忘れたということを防げる

です。

<?php
class AppController extends Controller {

  /*
  ログインを不要とするアクション名の配列
  (各コントローラで上書きする)
  */
  public $notNeedAuth = array();

  function beforeFilter()
  {
    
    //セッションから取り出したログイン情報をセット
    $auth = $this->Session->read('auth');
    $this->set("auth",$auth);
    
    /* ログイン必須のアクションで、
       ログインしていない場合はログイン画面へ転送 */
    if (array_search($this->action,$this->notNeedAuth) === false) {
      if (empty($auth)) {
        $this->flash("ログイン画面へ","/users/login",10);
        exit;
      }
    }
  }
}
?>

1.1系で作ったときのコードなので、今更感のある情報でした。1.2系なら素直にAuthコンポーネント(とallowメソッド)を使いましょう。