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している