CakePHP 2.0 ACL - 更新用户记录会导致ARO错误

时间:2012-12-13 15:10:37

标签: cakephp acl

我在CakePHP 2.3.0-RC1中使用ACL

当我更新用户字段(optin to marketing)时,我收到错误:

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

我认为这与保存用户有关。我在手册中找不到关于如何解决这个问题的任何内容。

以下是从Controller剪切的方法:

$me = $this->Session->read('Auth.User');
// don't use the session to display, because they might have subscribed/unsubscribed
$user = $this->User->find('first',array('conditions'=>array('User.id'=>$me['id'])));
$optin = ! $user['User']['optin'];
$data  = array(
                'User' => array(
                            'id'    => $me['id'],
                            'optin' => $optin
                        )
            );
if ( $this->User->save($data) ) 
{
    $this->Session->setFlash(__('Subscription status has been amended'));
} 
else 
{
     $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
$this->redirect(array('action'=>'account'));

重定向后,我收到了ARO错误。

2 个答案:

答案 0 :(得分:1)

根据评论我只是把它写成答案。

我将用户模型设置为请求者,但实际上打算在相关的“组”模型上使用基于角色的身份验证。

我设置了父节点但忽略了从用户模型中取出Acts As Requester。

评论说出了一个魅力 - 我实际上并不需要为用户提供一个ARO对象(只是组)而且它只是因为Cake教程包含它。

答案 1 :(得分:0)

当前教程(http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/simple-acl-controlled-application.html)表示禁用请求者指令

public $actsAs = array('Acl' => array('type' => 'requester', 'enabled' => false));
如果您打算使用仅限组的ACL,请在用户模型中使用

。你必须实现bind方法:

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

}

这对我有用。