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