[自分用メモ] CakePHPのbeforeFilter()内で条件処理後にリダイレクトをさせたい

[Sponsored Link]


当ブログでは「役に立った!」「写真使いました!」などご参考頂いた方からのAmazonギフト券の寄付をお待ち致しております。

Share on FacebookTweet about this on TwitterShare on Google+Share on TumblrPin on PinterestShare on LinkedInDigg this

CakePHPのControllerには、各アクションを実施する前に通過するbeforeFilter()があり、どのアクションが実行される場合でもこれが前もって実行されるため、認証や固定文字列設定などの共通処理で利用したりすることが多い。特にAppControllerクラスのbeforeFilter()は、あらゆるコントローラ内のアクションの実行に先立って実行されるので影響範囲も大きい。

認証処理においてログインしようとした、もしくはログイン中のアカウントが管理者権限などで途中から無効化されたなどの場合、あらゆる処理に先立ってその無効化されたアカウントの実行を止めてログアウトさせるという処理をしたい。
単純にbeforeFilter()に以下のような処理を記述すると、とんでもないことになる。

public function beforeFilter()
{
..........
                /* check current permission */
                if ($this->Auth->user('perm') == PERM_DISABLED) {
                        $this->redirect(array('controller' => 'logins', 'action' => 'logout'));
                }
..........
}
[Sponsored Link]


これをすると、redirect()でloginsコントローラのlogoutアクションを実行することになるが、このlogoutアクションの実行時にも当然ながらこのif文が処理されるため、redirectによる無限ループが発生してしまうことになる。
そこで、特定のアクションの場合にはこの処理を実行しないようにしなければならない。

public function beforeFilter()
{
..........
                /* check current permission */
                if ($this->param['controller'] != 'logins' && !in_array($this->action, array('login', 'logout'))) {
                        if ($this->Auth->user('perm') == $this->PERM_DISABLED) {
                                $this->redirect(array('controller' => 'logins', 'action' => 'logout'));
                        }
                }
..........
}

5行目のif文を加えた。これは現在のcontrollerとactionをチェックして、処理を避けなくてもよいアクションであればredirectを実施するという処理にしている。

ただしこのAuthComponentの認証について言えば、$this->Auth->user(‘perm’)のように取得する変数値はDBからの直接の取得値ではなく、ログイン認証完了時にセッション変数に保存した内容である。すなわち$this->Session->read(‘Auth.User.perm’)の値に等しい。従ってDB側のperm値を変えたとしても、変更されたアカウントが現在ログイン中であったとしても処理の影響は受けない。DBにアクセスしてチェックを都度入れるなど、一工夫する必要があるだろう(ただし負荷は高くなる)。

4種のベリーチーズケーキ ローソク・プレート・手紙付(誕生日ケーキ・バースデーケーキ プレゼント)PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)Webアプリ開発を加速する CakePHP2定番レシピ119よくわかるPHPの教科書 【PHP5.5対応版】CA貯蔵 長野県産 りんご サンふじ Cランク 10kg  (家庭用) (24玉~40玉) 訳あり(キズ・色ムラ・割れなど)  [糖度13度以上] 光センサー選果

[Sponsored Link]


Share on FacebookTweet about this on TwitterShare on Google+Share on TumblrPin on PinterestShare on LinkedInDigg this

当ブログでは「役に立った!」「写真使いました!」などご参考頂いた方からのAmazonギフト券の寄付をお待ち致しております。


Atsushi Ezura について

ナチュラルな女性のしぐさや表情を撮りたいIT系エンジニア。女性モデル募集中プロフィール
カテゴリー: CakePHP, PHP, ウェブ, コンピュータ タグ: , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。