我在使用ACL组件时遇到问题:
当我在添加操作中保存用户时,我运行此代码:
$aro = $this->Acl->Aro;
$aro->create();
$aro->save(array(
'alias' => $this->request->data['User']['username'],
'parent_id' => $this->request->data['User']['role_id'],
'model' => 'User',
'foreign_key' => $this->request->data['User']['id'],
));
但它会导致错误,说创建方法不存在。
哪种方法更好的实现ACL?
我正在尝试使用上面的代码和parentNode以及bindNodes的代码,但我正在努力解决它......
答案 0 :(得分:0)
首先,' parent_id
'应该是ARO表中引用角色的 aro节点的id,不是role_id 本身。你可以通过以下方式获得它:
$parentId = ClassRegistry::init('Aro')->field('id', array('model' => 'Role', 'foreign_key' => $this->request->data['User']['role_id']));
但是,我建议将AclBehavior附加到User和Role模型以自动更新ARO表。请仔细阅读本书中的this section。它直接类比您正在做的事情 - 只需将教程中的Group
替换为Role
即可。使用该行为还可以帮助您使用AclBehavior :: node()方法,该方法可以帮助您轻松获取节点引用,而无需直接在Aro和Aco模型上查找。