だいぶ間があいてしまいました。
が、バージョン3.5もリリースされたことなので、そちらを使って管理画面の構築を続けていきます。
CakePHPのアプリケーションが作成されていて、DBの設定とPrefixルーティングが済んだ状態の想定です。
adminテーブルを作る
まずはテーブル「admin」を作ります。
最近はバージョン管理システムでスキーマの変更も管理できるように、PHPスクリプトでテーブルを作ったりすることも出来るようですが、レトロエンジニアな私はDDLで作ります。こんな感じ。
--
-- テーブルの構造 `admin`
--
CREATE TABLE `admin` (
`id` int(11) NOT NULL,
`admin_cd` varchar(255) CHARACTER SET utf8 NOT NULL,
`admin_name` varchar(64) CHARACTER SET utf8 NOT NULL,
`password` varchar(255) NOT NULL,
`role` char(1) NOT NULL DEFAULT '0',
`delete_flg` char(1) NOT NULL DEFAULT '0',
`create_user` int(10) NOT NULL,
`modified_user` int(10) NOT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `admin`
--
ALTER TABLE `admin`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `admin`
--
ALTER TABLE `admin`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
いずれ管理者ごとに権限を制御をするかもしれないので、一般的そうな項目に「role」を付け加えておきました。
モデルとテンプレートをbakeする
テーブルが出来たら、そう、bakeしてモデルとテンプレートを作ります。
bin\cake bake model admin
bin\cake bake template --prefix admin admin
–prefix を忘れずに。(はい、私は忘れました_| ̄|○。)
再度 /admin/Admin にアクセスしてみましょう。
こんな風に表示されたらOKです。
これで下準備が終了。
管理者ログインを作成して、認証を設定する
管理者用のログイン処理、認証コンポーネントを設定していきます。
CakePHP3 で一般ユーザにログインを追加する方法は、チュートリアルのこちらに詳しく記載があります。
ここで考えなきゃいけないのが、作りたいのが「管理者」用のログインであるということです。
すなわち、一般ユーザとは分ける必要があります。
結論を言うと、以下のように設定していきます。
- /admin/ 用の AppController.php を追加する。
- 追加した AppController.php に管理者に認証コンポーネントを設定する。
- AdminController.php の継承元を追加した AppController.php に変更する。
/admin/ 用のAppController.php は元々あるAppController.php をコピーして作り、namespace 部分を次のように変更します。
namespace App\Controller\Admin;
チュートリアルを参照しながら、Authコンポーネントを設定します。具体的には initialize メソッドを次のようにします。
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
$this->loadComponent('Auth',[
'authenticate' => [
'Form' => [
'userModel' => 'Admin',
'fields' => [
'username' => 'admin_cd',
'password' => 'password'
],
'finder' => 'auth',
]
],
'loginAction' => [
'controller' => 'Admin',
'action' => 'login'
],
'loginRedirect' => [
'controller' => 'Admin',
'action' => 'home',
],
'storage' => [
'className' => 'Session',
'key' => 'Auth.Admin'
]
]);
}
ポイントは次の通りです。ソースの上から順番に。
(ソースコードがフォーマット出来てなくゴメンなさい。)
- モデル(テーブル)はAdmin(admin)を使用する。
- ログインのID / パスワードには、項目名 admin_cd / password を使用する。
- 認証時にAdminテーブルを検索する時に findAuth メソッドを使用する。
- ログイン処理は /admin/login (Adminコントローラの login メソッド)で行う。
- ログイン後は /admin/home (adminコントローラの home メソッド)にリダイレクトする。
- ログイン状態を Session の Auth.Admin というキーに格納する。
AdminController.php の継承元をこのファイルに変更します。
use App\Controller\Admin\AppController;
再度、 /admin/Admin にアクセスしてみると、こんなエラーになりました。
そりゃ当たり前だ。まだ login メソッド作ってませんからね。
認証を先に設定してしまったので編集画面にたどり着けませんでしたが、次回は是非。