CakePHP CookbookのACLのチュートリアルをやってみる
今度作るサイトにACLを用いたアクセス制御を取り入れる可能性が出てきたので、とりあえずチュートリアルをやってみます。
アプリケーションの準備
CakePHPを公式からダウンロード。cake_aclって名前にしました。ブラウザからアクセスするときはhttp://localhost/cake_acl/になります。
最新版を取得したら、 database.php をセットアップし、 app/config/core.php の Security.salt の値を変更してください。
いつものやつですねー。
<?php class DATABASE_CONFIG { var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'login', 'password' => 'password', 'database' => 'cake_acl', 'prefix' => '', 'encoding' => 'utf8', ); } ?>
アプリケーションを構築するための簡単なデータベーススキーマを作成しましょう。
この文の下にSQL文があるので、それらをまとめてコピー、phpMyAdminとかで処理させる。
データベースにこのテーブルを作成したら、クッキングを開始しましょう。 Cake の bake を使用し、モデルとコントローラ、ビューを手早く作成してみましょう。
bakeか…ざっとチュートリアルを見た感じだと、必要そうにないので、手書きで行きたいと思います。
あと、ここから要所のみ書くことにします(当たり前か)。
Auth を追加する準備
次に行うことは、 AppController に変更を加えることです。コントローラ全体に認証と ACL を行うなら、この AppController に対してセットアップを行います。
app_controlloer.phpがないのでcake/libs/controllerからapp_controller.phpをコピー、app/にペーストする。
<?php class AppController extends Controller { var $components = array('Auth', 'Acl'); function beforeFilter() { // AuthComponent のコンフィギュレーション $this->Auth->authorize = 'actions'; $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login'); $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add'); } } ?>
authorize変数についてはhttp://book.cakephp.org/ja/view/396/authorizeに書いてあるけど、「actions」と指定した場合の説明が書いてない。アクション単位で認証するってことなんだろうけど。
ACL のデータベーステーブルの初期化
コンソールアプリケーションについてはhttp://book.cakephp.org/ja/view/113/Code-Generation-with-Bakeに書いてある。
スキーマファイルを実行します。シェルにおいて「cake schema run create DbAcl」というコマンドを実行してください。テーブルのドロップと作成についてプロンプトが表示されます。「yes」と入力し、テーブルのドロップと作成を実行してください。
ほうほう。じゃあやってみるか。
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\cake_acl\cake\conso le>cake schema run create DbAcl Welcome to CakePHP v1.2.0.7296 RC2 Console --------------------------------------------------------------- App : console Path: C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/cake_acl/cake /console --------------------------------------------------------------- Cake Schema Shell --------------------------------------------------------------- Error: schema.php could not be loaded C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\cake_acl\cake\conso le>
('A`) schema.php could not be loaded...
「cakephp schema.php」でググるとこのページが現れた。
CakePHP1.2 Schema を試してみた | Sun Limited Mt.
http://www.syuhari.jp/blog/archives/485
該当箇所を見てみると次の文が。
で、そのディレクトリに行ってみたが、schema.phpがない。あれ?
スキーマの作成
$ cake schema generate
schema.php というファイルが app/config/sql に作成される
schema.php が存在する場合は上書きするかどうか聞かれる
ああ、「cake schema generate」しないといけないのね。じゃあやってみるか…。
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\cake_acl\cake\conso le>cake schema generate Welcome to CakePHP v1.2.0.7296 RC2 Console --------------------------------------------------------------- App : console Path: C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/cake_acl/cake /console --------------------------------------------------------------- Cake Schema Shell --------------------------------------------------------------- Generating Schema... Error: Missing Database Connection. Try 'cake bake' C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\cake_acl\cake\conso le>
( ;∀;) イイハナシダナー
「Try 'cake bake'」ってなんだよ!bakeしないといけないのかよ!なんだよちくしょう、最初に言ってくれよ!ヽ(`Д´)ノ
…まぁチュートリアル通りやらなかった自分が100%悪いんですけどね…。
ドッと疲れたので
今日はこの辺で…。またそのうち続きやります(もう30日になってるし)。