PR

CakePHP – ACL再入門(2)

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

コメント