[CakePHP]adminルーティングの時だけAuth認証を行う

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);	// ビューで使いやすいようにセットもしてます。ヘッダーに○○さん、こんにちは的な感じでつかったり。
}
スポンサーリンク
336x280_1
336x280_1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
336x280_1

コメント