Cake PHP データベースを利用するACLの使い方1

PHP

CakePHP データベースを利用するACLの使い方

ログインを必要とするWebアプリケーションのニーズは非常に多いでしょう。
ログインをCake PHPではACL(Access Control List)という方法で細かく制御できます。

本家のマニュアルサイトでは説明が分かりにくかったので書いておきます。

【参考】
[[Defining Permissions: Cake’s Database ACL:
http://book.cakephp.org/view/467/Defining-Permissions-Cake-s-Database-ACL]]

Simple Acl controlled Application

まず、ACOとAROという単語を理解します。

  • ACO=Access Control Object アクセスを求められる機能など

たとえば、ブログの投稿機能、削除機能、編集機能などのような機能が多く考えられます。

 
  • ARO=Access Request Object

多いケースは、ユーザーです。一般ユーザーだったり、管理者だったり、というような区分けがあるでしょう。

それでは、ユーザーとグループを作りましょう。
ユーザーは数が多いので、グループを作るのが一般的です。

本家マニュアルサイトに習い、「指輪物語」のキャラクターで考えてみます。
(指輪物語について知らないと理解が難しいかもしれませんが(^_^;)

Fellowship of the Ring™(指輪物語)

    * 戦士
          o アラゴルン
          o レゴラス
          o ギムリ
    * 魔法使い
          o ガンダルフ
    * ホビット
          o フロド
          o ビルボ
          o メリー
          o ピピン
    * 訪問者
          o ゴラム

上記では、ユーザーがアラゴルンやレゴラスで、戦士や魔法使い、がグループです。

指輪物語的なCRUD(Create, Read, Update, Delete)アプリケーションができあがっていて、これからユーザー認証を加えるという前提です。

グループのテーブル(Groups)を作り、ユーザーのテーブル(Users)に所属するGroupIDを入れましょう。

ユーザーのモデル(user.php)に次のように記述します。

 var $belongsTo = array(
   'Group' => array(
 	'className' => 'Group',
 	'foreignKey' => 'group_id',
 	'conditions' => '',
 	'fields' => '',
 	'order' => ''
   )
 );

グループのモデル(group.php)に次のように記述します。

 var $hasMany = array(
  'User' => array(
 	'className' => 'User',
 	'foreignKey' => 'group_id',
 	'dependent' => false,
 	'conditions' => '',
 	'fields' => '',
 	'order' => '',
 	'limit' => '',
 	'offset' => '',
 	'exclusive' => '',
 	'finderQuery' => '',
 	'counterQuery' => ''
   )
 );

ユーザーはグループにblongsToで、グループはユーザーに対してhasManyという関係です。
(データベースのテーブルも、そのように作っておきます。)

ここまでできたら、ケーキのコンソールから、次のようにコマンドを打ちます。

 cake schema run create DbAcl

(cake)の部分は、cake.batなどを動かす部分です。

すみません、ちゃんと全部解説するつもりでしたが、途中で終わっていました。
役に立たなかったの声にお応えして(^_^;、続きを記載しておきます。

 cake schema run create DbAcl

を進めていくと、aros, acos, aros_acos, という3つのテーブルができると思います。

aros, acos, aros_acos というテーブルの中身については、データベースを利用するログインに必要なものですが、とりあえず気にしないで次に進みましょう。

Cake PHP データベースを利用するACLの使い方2

カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です