やっぱりACLは難しい。整理の意味も含めてもう一度入門しておく。(今回はCakePHP1.3.2です)
データベースの準備が整ったので、modelに進む。
スポンサードリンク
models/group.php
<?php class Group extends AppModel { var $name = 'Group'; var $actsAs = array('Acl' => array('requester')); var $validate = array( 'name' => array( 'notempty' => array( 'rule' => 'notempty', 'message' => '必須項目です', ), 'unique' => array( 'rule' => 'isUnique', 'message' => 'すでに使用されています', ), ), ); var $hasMany = array( 'User' => array( 'className' => 'User', 'foreignKey'=> 'group_id', 'conditions'=> '', 'fields' => '', 'order' => '', 'dependent' => true, ) ); function parentNode() { return null; } } ?>
models/user.php
<?php class User extends AppModel { var $name = 'User'; var $actsAs = array('Acl' => 'requester'); var $validate = array( 'username' => array( 'unique' => array( 'rule' => 'isUnique', 'message' => 'このユーザ名はすでに使用されています', ), 'alphaNumeric'=>array( 'rule' => array('custom', '/^[a-z][a-z0-9]{3,}$/'), 'message' => '半角英数[a-z][a-z0-9]で入力してください', ), ), 'password1' => array( 'notempty' => array( 'rule' => 'notEmpty', 'message' => '入力必須項目です', ), 'minLength' => array( 'rule' => array('minLength', 3), 'message' => '3文字以上である必要があります', ), ), 'group_id' => array('numeric') ); var $belongsTo = array( 'Group' => array( 'className' => 'Group', 'foreignKey'=> 'group_id', 'conditions'=> null, 'fields' => null, 'order' => null, ), ); 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'])); } } function afterSave($created) { if (!$created) { $parent = $this->parentNode(); $parent = $this->node($parent); $node = $this->node(); $aro = $node[0]; $aro['Aro']['parent_id'] = $parent[0]['Aro']['id']; $this->Aro->save($aro); } } } ?>
コメント