developer's diary

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

CakePHPのACL(Access Control List)の解説を砕いてみる~リクエスタとして振舞う~

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

ここでやるべきこと。

  1. User モデルにAclBehaviorを追加する
  2. User モデルにparentNodeメソッドを追加する
  3. Group モデルにAclBehaviorを追加する
  4. Group モデルにparentNodeメソッドを追加する
  5. グループとユーザを追加する

User モデルにAclBehavior、parentNodeメソッドを追加する

<?php
class User extends AppModel {

    var $name = 'User';

    //--add start mitsugi-bb--------
    var $actsAs = array('Acl' => array('requester'));

    function parentNode() {
        if (!$this->id && empty($this->data)) {
            return null;
        }
        $data = $this->data;
        if (empty($this->data)) {
            $data = $this->read();
        }
        if (!$data['User']['group_id']) {
            return null;
        } else {
            return array('Group' => array('id' => $data['User']['group_id']));
        }
    }
    //--add end   mitsugi-bb--------

    //The Associations below have been created with all possible keys, those that are not needed can be removed
    var $belongsTo = array(
            'Group' => array('className' => 'Group',
                                'foreignKey' => 'group_id',
                                'conditions' => '',
                                'fields' => '',
                                'order' => ''
            )
    );

    var $hasOne = array(
            'Post' => array('className' => 'Post',
                                'foreignKey' => 'user_id',
                                'dependent' => false,
                                'conditions' => '',
                                'fields' => '',
                                'order' => ''
            )
    );

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

}
?>

Group モデルにAclBehavior、parentNodeメソッドを追加する

<?php
class Group extends AppModel {

    var $name = 'Group';

    //--add start mitsugi-bb--------
    var $actsAs = array('Acl' => array('requester'));

    function parentNode() {
        return null;
    }
    //--add end   mitsugi-bb--------

    //The Associations below have been created with all possible keys, those that are not needed can be removed
    var $hasOne = array(
            'User' => array('className' => 'User',
                                'foreignKey' => 'group_id',
                                'dependent' => false,
                                'conditions' => '',
                                'fields' => '',
                                'order' => ''
            )
    );

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

}
?>

グループとユーザを追加する

ブラウザでgroups/addにアクセスして管理者グループを作成する

同じようにマネージャーグループ、一般ユーザグループを作成する

次にusers/addにアクセスしてユーザを作成する

同じように、マネージャグループのユーザ、一般ユーザグループのユーザを作成する

確認のために、SELECT * FROM aros;を実行してみる。

※注意

このチュートリアルを進める上で一つ注意点があります。それは、 User のグループを変更しても、それらの ARO は変更されないということです。これは別途、行う必要があります。

ということで、既存ユーザのUPDATEを行っても、arosテーブルは更新されないです。

次のページはまた今度(ぁ

次のページへ進む。