AclBehavior対応usersモデルの修正
AROをAclBehaviorで登録する方法を修正。
editなど、Usersをuploadする系の画面で、POSTにgroup_idが含まれていないと、AROのparent_idがNULLになったので、それを修正しました。
AclBehaviorに対応してmodels/user.php に追加した、parentNode()とsave()の関数2つは、
- 「$this->data(POST)にgroup_idが含まれること」
が前提となっています。
しかし、例えばパスワードだけ変更する画面にはgroup_idのフォームはない。
その場合、nullセットされてAROに登録されるバグとなっていました。
$this->data['User']['group_id']がない*1場合の処理を追加しました。
以下、差分
Index: models/user.php =================================================================== --- models/user.php (revision 184) +++ models/user.php (working copy) @@ -61,6 +61,8 @@ $data = $this->data; if (empty($this->data)) { $data = $this->read(); + } elseif (!$data['User']['group_id']) { + $data['User']['group_id'] = $this->read('group_id'); } if (!$data['User']['group_id']) { return null; @@ -80,7 +82,9 @@ App::import('Component', 'Acl'); $Aro = new Aro; $Aro->id = $Aro->field('id', $conditions); - $Aro->saveField('parent_id', $data['User']['group_id']); + if ($data['User']['group_id']) { + $Aro->saveField('parent_id', $data['User']['group_id']); + } $Aro->saveField('alias', $this->name . '::' . $this->id); return true; }
*1:ハッキング防止のため、パスワード変更画面などではむしろ、POSTがあってもunsetしている