CakePHP CookbookのACLのチュートリアルをやってみる

今度作るサイトにACLを用いたアクセス制御を取り入れる可能性が出てきたので、とりあえずチュートリアルをやってみます。

環境

PHP 5.2.6
CakePHP 1.2.0.7296 RC2
MySQL 5.0.67

アプリケーションの準備

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

該当箇所を見てみると次の文が。

app/config/sql/schema.php の内容でデータベース内にテーブルを作成する

で、そのディレクトリに行ってみたが、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日になってるし)。