CakePHPのACL(Access Control List)の解説を砕いてみる~ACL のデータベーステーブルの初期化~
CakePHPのACL(Access Control List)の解説を砕いてみる~Auth を追加する準備~の続き。
ここでやるべきこと。
- ACLで使用するテーブルの作成
作成のパターンは2パターンあるようです。
- コマンドを叩いて自動で作成
- 自分でSQLを実行する
コマンドで作成する
解説記事にある『cake schema run create DbAcl』というコマンドだと、なんだかうまく行かないみたいで。
Welcome to CakePHP v1.2.0.7692 RC3 Console --------------------------------------------------------------- App : www Path: ~/ --------------------------------------------------------------- Cake Schema Shell --------------------------------------------------------------- Error: schema.php could not be loaded
とかいうエラーがでて。。。
でも以下のコマンドでできましたよ。
$> php cake.php schema run create DbAcl
結果は以下の通り
$> php ~/www/1.2.x.x/cake/console/cake.php schema run create DbAcl Welcome to CakePHP v1.2.0.7692 RC3 Console --------------------------------------------------------------- App : app Path: ~/www/1.2.x.x/app --------------------------------------------------------------- Cake Schema Shell --------------------------------------------------------------- The following table(s) will be dropped. acos aros aros_acos Are you sure you want to drop the table(s)? (y/n) [n] > y Dropping table(s). acos updated. aros updated. aros_acos updated. The following table(s) will be created. acos aros aros_acos Are you sure you want to create the table(s)? (y/n) [y] > y Creating table(s). acos updated. aros updated. aros_acos updated. End create. $>
SQLで直接作成
うまくコマンドで作成できない場合は、/app/config/sql 配下にある、db_acl.sqlを直接phpmyadmin等で実行してください。
/* acos(アクセスコントロールオブジェクト)テーブルの作成 */ CREATE TABLE acos ( id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, parent_id INTEGER(10) DEFAULT NULL, model VARCHAR(255) DEFAULT '', foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, alias VARCHAR(255) DEFAULT '', lft INTEGER(10) DEFAULT NULL, rght INTEGER(10) DEFAULT NULL, PRIMARY KEY (id) ); /* aros_acos(acosとarosの関係を管理)テーブルの作成*/ CREATE TABLE aros_acos ( id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, aro_id INTEGER(10) UNSIGNED NOT NULL, aco_id INTEGER(10) UNSIGNED NOT NULL, _create CHAR(2) NOT NULL DEFAULT 0, _read CHAR(2) NOT NULL DEFAULT 0, _update CHAR(2) NOT NULL DEFAULT 0, _delete CHAR(2) NOT NULL DEFAULT 0, PRIMARY KEY(id) ); /* aros(アクセスリクエストオブジェクト)テーブルの作成 */ CREATE TABLE aros ( id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, parent_id INTEGER(10) DEFAULT NULL, model VARCHAR(255) DEFAULT '', foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, alias VARCHAR(255) DEFAULT '', lft INTEGER(10) DEFAULT NULL, rght INTEGER(10) DEFAULT NULL, PRIMARY KEY (id) );
3つのテーブルが出来上がりました。
ちなみにACL に関するすべてのモデルクラスは、cake/libs/model/db_acl.phpにあるそうです。
次のページへ進む。