0

目前我已经在 CakePHP 应用程序中设置了 Auth & 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 |
+----+-----------+-------+-------------+-------+------+------+

User此后,我将and模型重构Group为他们自己的名为“Survey”的插件(以及其他模型、控制器、组件等)。

我立即收到此错误:

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

我更新了User::bindNode()方法以在模型上包含“调查”前缀:

class User extends SurveyAppModel
{
    // ...

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

    //...
}

我还将aros表中的“模型”字段更改为“Survey.Group”而不是“组”。

然后这消除了错误,我的授权和身份验证再次起作用。当我将新记录保存到 Group 模型时,我的问题现在发生了,aros表中的模型字段设置为“Group”而不是“Survey.Group”,所以我得到与以前相同的错误。

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

4

1 回答 1

0

我已经通过设置$nameGroup 模型的属性并在其前面加上插件名称来解决这个问题。您还需要设置$useTable属性,就好像您不这样做一样,它会查找名为my_plugin.my_model.

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

class Group extends SurveyAppModel
{
    // ...

    public $name = 'Survey.Group';

    public $useTable = 'groups';

    // ...
}

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

于 2013-06-20T08:48:32.647 回答