Cakeの初期設定
cakePHP3.5でアプリでも創ってみようぞ。
とりあえずプロジェクトまで創って、Bitbucketにコミットしてある。
DBはmysqlで、ちゃちゃっとインストールしてある。
ローカルのDBクライアントはSequel Proを使っちょるばい。
だいたいログイン周り必要になるので、ACL含めて最初から作っとくぜい。
1.mysqlにデータベース作る
データベースの名前と、ユーザとパスワードは適当。
mysql -u root -p
CREATE DATABASE DATABASE_NAME CHARACTER SET utf8;
grant all privileges on DATABASE_NAME.* to USER@localhost identified by 'PWD';
FLUSH PRIVILEGES;
2.Sequel Proに今回つくったDBへのアクセスを追加する
3.とりあえずユーザー周りのテーブル作る
CREATE TABLE `groups` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`PASSWORD` varchar(255) DEFAULT NULL,
`group_id` int(11) NOT NULL,
`role` varchar(25) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.cakePHPにデータベース接続設定する
プロジェクトの中のconfig/app.default.phpをコピってconfig/app.phpを作る
ファイルの中にDatasourcesについて記述されているところを書き換える。
SECURITY_SALTも変えてなかったら、適当にかえる。
5.Composerで「cakephp/acl」を追加する
composer.jsonのrequireに以下追加
6.usersとgroupをbake allしとく
php bin/cake.php bake all users
php bin/cake.php bake all groups
7.アクセスコントロール(ACL)使うぜの設定
config/bootstrap.php を開いて一番最後にでも以下を追記
Plugin::load('Acl', ['bootstrap' => true]);
8.いろいろ修正するぜ!のコーナー
ここを参考にすると良い。
っていうか、最初からこれだけ見ればOKって話もある。
https://github.com/mattmemmesheimer/cakephp-3-acl-example
9.アクセスコントロールのテーブル作る
php bin/cake.php Migrations.migrations migrate -p Acl
php bin/cake.php acl_extras aco_sync
10.その後、なにか追加したら
php bin/cake.php acl_extras aco_update
12.ユーザーとかグループとか作る
11.パーミッション設定祭り開始
groupのIDが1番の人がAdminだったとして、全アクセスつけるならこれ。
php bin/cake.php acl grant Groups.1 controllers
groupのIDが2番の人は、とりあえず全アクセスは剥奪。
php bin/cake.php acl deny Groups.2 controllers
だけども、Userテーブル操作するくらならOKだぞよ。
php bin/cake.php acl grant Groups.2 controllers/Users
groupのIDが3番の人は、ユーザーの一覧くらいはみれるけど、それだけじゃ。
php bin/cake.php acl deny Groups.3 controllers/Users/index
こんなかんじ。
パーミッション設定祭りは、ちょ〜めんどうなんだけどさ。
簡単に設定できそうなヘルパー入れたらアカンかった。
ACL周りのテーブルは派手にドロップしても、簡単に作り直せるよ。
DROP TABLE acos;
DROP TABLE aros;
DROP TABLE aros_acos;
DROP TABLE acl_phinxlog;
TRUNCATE groups;
TRUNCATE users;