ARO表中的模型字段不是插件名称的前缀

时间:2013-06-19 09:23:11

标签: cakephp acl cakephp-2.3

目前我已经设置了Auth& CakePHP应用程序中的ACL组件。我有Group& User模型设置为充当请求者。这一切都很好,开始时,aros表在添加新组时正确更新。例如,这将是我aros表的内容:

+----+-----------+-------+-------------+-------+------+------+
| id | parent_id | model | foreign_key | alias | lft  | rght |
+----+-----------+-------+-------------+-------+------+------+
|  1 |      NULL | Group |           1 | NULL  |    1 |    2 |
|  2 |      NULL | Group |           2 | NULL  |    3 |    4 |
|  3 |      NULL | Group |           3 | NULL  |    5 |    6 |
+----+-----------+-------+-------------+-------+------+------+

我已经将UserGroup模型重构为他们自己的名为'Survey'的插件(以及其他模型,控制器,组件等)。

我立刻得到了这个错误:

AclNode::node() - Couldn't find Aro node identified by "Array ( [Aro0.model] => Group [Aro0.foreign_key] => 1 ) "

我更新了User::bindNode()方法,在模型中包含'Survey'前缀:

class User extends SurveyAppModel
{
    // ...

    public function bindNode($user)
    {
        return array('model' => 'Survey.Group', 'foreign_key' => $user['Survey.User']['group_id']);
    }

    //...
}

我还将aros表中的'model'字段更改为'Survey.Group'而不是'Group'。

然后删除了错误,我的授权和身份验证再次正常运行。我的问题现在发生在我将新记录保存到Group模型时,aros表中的模型字段设置为'Group'而不是'Survey.Group',因此我得到与以前相同的错误。

所以我想知道如何获得它,以便当我将新记录保存到Group模型时,它会自动将插件前缀名称添加到'model'字段中?

1 个答案:

答案 0 :(得分:0)

我已经通过设置Group模型的$name属性并在其前面添加插件名称来修复此问题。您还需要设置$useTable属性,就好像它不会查找名为my_plugin.my_model的表一样。

例如,这就是我现在在我的Group模型中设置的,它是'Survey'插件的一部分。

class Group extends SurveyAppModel
{
    // ...

    public $name = 'Survey.Group';

    public $useTable = 'groups';

    // ...
}

我通过浏览AclBehavior::afterSave()方法发现了这一点,在那里它将记录保存到aros表,并使用$model->name属性作为模型字段。