通常のページでは通常ユーザー、管理画面は管理者ユーザーって要件があって、CakePHPで対応するにはどうすれば良いのかを探して実装してみた。
下記記事が参考なりました。ありがとうございますm(_ _ )m
prefix routing
ドキュメントを読んでも良いが、下の記事がわかりやすかった。
記事にあるとおり、CakePHPは、URLを認識て、prefix(接頭辞)をつけることができる。
この場合ControllerのAction名が指定したprefixの値が接頭辞になるので、その点だけ注意。
複数ログイン認証
要は、prefix routingで付与された値が管理者ユーザーであるかどうかの判断を~/app/Controller/AppController.php
のbeforeFilter()
で確認して、layoutなどを変更する。
その中で、AuthComponent
の値も変更して、管理ユーザーと通常ユーザーの認証を分ければ良い。
<?php ... public function beforeFilter() { // prefixが"admin"であれば if (isset($this-params['prefix']) && $this->params['prefix'] === 'admin') { $this->layout = 'admin'; // layoutファイルを管理画面用に $this->_setAdminAuthParameter(); // Auth Componentのパラメータを管理用へ変更 } parent::beforeFilter(); } private function _setAdminAuthParameter() { $this->Auth->authenticate = [ 'Form' => [ 'userModel' => 'AdminUser', 'passwordHasher' => 'Blowfish', 'fields' => [ 'username' => 'email' ] ] ]; $this->Auth->loginAction = [ 'controller' => 'users', 'action' => 'admin_login', 'admin' => true ]; $this->Auth->loginRedirect = [ 'controller' => 'admin_users', 'action' => 'admin_index', 'admin' => true ]; $this->Auth->logoutRedirect = [ 'controller' => 'users', 'action' => 'admin_login', 'admin' => true ]; AuthComponent::$sessionKey = "Auth.Owner"; }
また他のタイプのユーザーが必要になったとしても、prefixの値は配列にして増やすことができるので、大丈夫だと思う。