CakePHP2で簡単にACLを使う方法
チョーシドウダ?カラダァ?どうも、高橋です!
今朝、CakePHP2.3.0-beta版がリリースされましたね!
今回のリリースでは、パフォーマンス、セキュリティ、使いやすさを向 上させる新機能が追加されました。
また完全に下位互換があるので、2.2系からのマイグレーションは(おそらく)容易でしょう。
というわけで、早速Cake2.3を使ってACLを実現してみたいと思います。
イメージが掴みにくいと思ったのでデモを作成しました。(がんばりました!
ログイン:http://s1.asial.co.jp/~yuya/blog/20121029/users/login
username: adminuser / password: 0000
ACL管理 :http://s1.asial.co.jp/~yuya/blog/20121029/admin/acl
またCakePHPのセットアップについては以下の記事をご覧ください。
http://blog.asial.co.jp/1040
ACLとは
ACLとは、ユーザやグループを元に権限を制御することです。
例えば、ファイルやフォルダのパーミッションですね。
これをWebに置き換えると、↓のような感じです。
「アシアル(グループ)の高橋(ユーザ)はアシアルブログを編集を許可する(権限)」
とっても簡単ですね。
ACLを利用することで、通常の認証機構では困難なフレキシブルな権限管理をいとも簡単に実現出来ます。
プラグインの設定
っていきなりプラグインに頼るんかい!ってそのリアクション、ありがとうございます。
簡単に扱うというテーマには合致しているので問題ないはず。
ダウンロードはこちら(直リンです)
http://www.alaxos.ch/blaxos/downloads/get/alaxos_acl_2.2.0.zip
このプラグインはCakePHP製CMSで有名なcroogoでも採用されている実績があります。
またファイル名に「2.2.0」とかいう意味深な文字列がありますが、気にしないでおきましょう。
1. プラグインを配置する
解凍すると「Acl」というフォルダになるので「app/Plugin/Acl」のように配置します。
2. adminルーティングを有効にする
app/Config/core.php の113行目付近のコメントアウトを解除します。
//Configure::write('Routing.prefixes', array('admin'));
↓
Configure::write('Routing.prefixes', array('admin'));
3. プラグインと設定の読み込み
app/Config/bootstrap.php の145行目付近に以下のコードを追加します。
CakePlugin::load('Acl', array('bootstrap' => true));
これで完了。
必要なテーブルを作成する
まずユーザやグループのテーブルを作成します。
ACLではARO(リクエストオブジェクト)の役割を成します。
CREATE TABLE users (
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
password CHAR(40) NOT NULL,
group_id INT(11) NOT NULL,
created DATETIME,
modified DATETIME
);
CREATE TABLE groups