やっぱり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);
}
}
}
?>

コメント