目前我已经设置了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 |
+----+-----------+-------+-------------+-------+------+------+
我已经将User
和Group
模型重构为他们自己的名为'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'字段中?
答案 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
属性作为模型字段。