【Cake】一般用テーブルと、管理用テーブルを分ける場合のログイン(Auth)の使い方・整理
まず1つサービス・ログイン機能
これは
①Userテーブル、UserModel、UsersControllerを作成し、
②サービス用のコントローラーを作成
③Authコンポーネントをサービス用のControllerで読み込んで、loginが必要なactionを設定する。
これでOK。
次に管理系
以下のやりくちが考えられる。
①一つのログインで、管理ユーザーと一般ユーザーを同一テーブルで権限で分ける。
②二つのログインで、管理ユーザーと一般ユーザーを別テーブルで管理する場合。
個人的には管理ユーザと一般ユーザーは混在させたくないので、②でやりたい。
その場合、
一つのCakeapp、複数のControllerで異なるテーブルで認証というのはcomponentの設定で下記参考でできる。
- ・管理用コントローラー(Managerテーブル)
- ・一般サービス用コントローラー(Userテーブル)
コントローラー認証部分
http://liginc.co.jp/programmer/archives/2744
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public $components = array( 'Session', 'Auth' => array( // 認証時の設定 'authenticate' => array( 'Form' => array( // 認証時に使用するモデル 'userModel' => 'Manager', // 認証時に使用するモデルのユーザ名とパスワードの対象カラム 'fields' => array('username' => 'code' , 'password'=>'password'), ), ), // ログイン失敗時に出力するメッセージを設定 'loginError' => 'パスワードもしくはログインIDをご確認下さい。', // ログインしていない場合のメッセージを設定 'authError' => 'ご利用されるにはログインが必要です。', // ログインに使用するアクションを指定 'loginAction' => array('action' => 'login'), // ログイン後のリダイレクト先を指定 'loginRedirect' => array('controller' => 'posts', 'action' => 'index'), // ログアウト後のリダイレクト先を指定 'logoutRedirect' => array('action' => 'login'), ), ); |
でもこれだと、Usersテーブル以外で認証しているだけで、アプリ内ではCookie名が同一となり、別テーブルで認証していても、別の認証も通ることになってしまう。
アプリ側で、Adminルーティングとか設定してあげないといけない。
※個人的にはAdminルーティングはなんか嫌。ミスりそうで。
なので、別テーブル、別ログイン(Cookie)とするためには、app自体を別々にする必要がある。
その上で、Config/core.phpでCookie名を別にしてあげる。
それがやり方②
こっちのほうが個人的に混在はないし安心。
複数アプリの作成方法は下記を参考にして….
https://www.marineroad.com/staff-blog/3159.html
1Cakeで複数アプリを利用する方法
<前提>
フォルダ構成は下記を想定。
cakeファイルはドキュメントルートに置かないようにもしている。
cakeのバージョンは2.6.11
1 2 3 4 5 6 7 8 9 |
■DocumentRoot: ・/var/www/html/ ■Cakeアプリのweb側: ・/var/www/html/apps/public ・/var/www/html/apps/manage ■Cakeフォルダ ・/var/www/cake/..... |
①Cakeを取得し、/var/www/cakeに配置する。
②appsフォルダを作成し、appの中身をapps内に移動。さらにコピーして、publicとmanageフォルダを作成する。
1 2 3 4 5 6 |
# cakeフォルダ内で mkdir apps mv app apps cd apps cp -p app manage //manage用アプリフォルダ mv app public //public用アプリフォルダ |
③それぞれのアプリフォルダ内に移動し、webrootの中身を公開領域に持っていく。
1 2 3 4 5 |
# cake/appsの中から cd public mv webroot /var/www/html/apps/public cd ../manage mv webroot /var/www/html/apps/manage |
④移動させたwebrootフォルダ内のindex.phpをいじる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#38行目から if (!defined('ROOT')) { //define('ROOT', dirname(dirname(dirname(__FILE__)))); define('ROOT', '/pj/test.mtpro.jp/ptwapp_site5/apps'); //←cake appsフォルダ } #48行目から if (!defined('APP_DIR')) { //define('APP_DIR', basename(dirname(dirname(__FILE__)))); define('APP_DIR', 'manage'); //←apps/publicに紐付けるindex.phpなら 「public」 manageなら「manage」 } #100行ぐらいから if (!defined('CAKE_CORE_INCLUDE_PATH')) { if (function_exists('ini_set')) { //ini_set('include_path', ROOT . DS . 'lib' . PATH_SEPARATOR . ini_get('include_path')); ini_set('include_path', dirname(ROOT) . DS . 'lib' . PATH_SEPARATOR . ini_get('include_path')); //←ここ } if (!include 'Cake' . DS . 'bootstrap.php') { $failed = true; } |
これでそれぞれのアプリに以下のURLでアクセスできる。
・http://test.jp/apps/public/コントローラ名
・http://test.jp/apps/manage/コントローラー名
中身のtmpの権限とか、dbconfigの設定とか、security.saltとかはそれぞれ設定。片方やってから、それをコピーしても良い。
関連記事
-
-
CakePHPでjoinしようとしたときのエラー 【Notice (8): Undefined offset: 0 [CORE/Cake/Model/Datasource/DboSource.php, line 1714]】
Cakeでfind()からjoinしようとしたときに下記Noticeが出て、検索 …
-
-
[Cake]CakePHPで意識の低いトランザクション commit rollback
cakeで複数のテーブルにまたがったトランザクション管理をしたい。 …
-
-
【Cake】CakePHP_開発はじめる前に_いつも調べなおすことまとめ
Contents1 参考リンク集2 set flashのcssクラスを変更する3 …
-
-
CakePHP コントローラー内でフォーム・モデル名を取得して、ソースをすっきりしたい
こんな感じで自分で設定しちゃうけどいいのかな? こうしないと、ちょっとデフォルト …