developer's diary

最近はc#のエントリが多いです

CakePHPのACL(Access Control List)の解説を砕いてみる~ACL のデータベーステーブルの初期化~


CakePHPのACL(Access Control List)の解説を砕いてみる~Auth を追加する準備~の続き。

ここでやるべきこと。

  1. ACLで使用するテーブルの作成


作成のパターンは2パターンあるようです。

  1. コマンドを叩いて自動で作成
  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にあるそうです。

次のページへ進む。