adminルーティングを行うときだけAuthComponentsの認証を行う方法のメモです。
わずか1行書けば済むのに、アプリを作るたびに別のアプリのソースコピペしたりしてるのでここら辺で記憶にとどめておきたいと思います(笑)
はじめに
core.phpに「Configure::write(‘Routing.prefixes’, array(‘admin’));」が設定してあって、AppControllerでAuthコンポーネントをセットしていることとします。
AppController::beforeFilterの設定
Authコンポーネントをセットするとデフォルトでは全アクションがdenyになっています。
そこで、adminルーティングしないときだけ当該アクションをallowします。
adminルーティングが行われているかどうかは$this->params[‘admin’]で判断できます。
参考:パラメータ属性($params) :: コントローラの属性 :: コントローラ :: CakePHPによる開発 :: マニュアル :: 1.3コレクション
/app/app_controller.php
function beforeFilter() {
// 認証設定
$this->_auth(); // beforeFilterがごちゃごちゃしないように認証設定を別メソッドにまとめています
if (empty($this->params['admin'])) {
// adminルーティングではない場合、認証を通さない(allow)
$this->Auth->allow($this->params['action']);
}
}
おまけ
ちなみに僕の場合、beforeFilterをスッキリさせたいのでAuthコンポーネントの変数設定をこんな風に別メソッドにまとめています。
/**
* 認証設定
*/
function _auth() {
// Auth設定
$this->Auth->userScope = array(
'Member.deleted' => 0,
);
$this->Auth->loginAction = array('admin' => false, 'controller' => 'members', 'action' => 'login');
$this->Auth->loginError = 'Oops!メールアドレスかパスワードが間違っています。';
$this->Auth->authError = 'アクセス権限がありません';
$this->Auth->fields = array('username' => 'mail', 'password' => 'password');
$member = $this->Auth->user();
$this->member = $member['Member']; // コントローラでログインユーザ情報を使いやすいようにメンバ変数にセットしています
$this->set('member', $this->member); // ビューで使いやすいようにセットもしてます。ヘッダーに○○さん、こんにちは的な感じでつかったり。
}
コメント
test