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

CakePHP 2.0 ACL-更新用户记录会导致ARO错误,cakephp,acl,Cakephp,Acl,我正在CakePHP2.3.0-RC1中使用ACL 当我更新用户字段(选择营销)时,我得到一个错误: AclNode::node() - Couldn't find Aro node identified by "Array ( [Aro0.model] => User[Aro0.foreign_key] => 4 ) " 我认为这与保存用户有关。我在手册中找不到任何关于如何解决这个问题的内容 以下是从控制器截取的方法: $me = $this->Session->re

我正在CakePHP2.3.0-RC1中使用ACL

当我更新用户字段(选择营销)时,我得到一个错误:

AclNode::node() - Couldn't find Aro node identified by "Array ( [Aro0.model] => User[Aro0.foreign_key] => 4 ) "
我认为这与保存用户有关。我在手册中找不到任何关于如何解决这个问题的内容

以下是从控制器截取的方法:

$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错误。

根据评论,我只是将此作为答案写下来

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

我设置了父节点,但忽略了从用户模型中取出作为请求者的角色

评论说这很有魅力——我实际上并不需要用户使用ARO对象(仅仅是组),它的存在只是因为Cake教程包含了它

当前教程()说禁用请求者指令

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']);
}


这对我很有用。

从未使用过Aro,但如果您进行
调试($Aro)数组是否包含任何无效数据?看起来用户没有该对象的acl条目。@ColbyGuyer是正确的,用户缺少ARO记录,因此acl检查在试图查找该记录时抛出该错误。通常在ACL设置中,用户模型具有添加ARO的余留。确保一切顺利。谢谢@ColbyGuyer和jeremyharris。。。我将用户模型设置为请求者,但实际上打算在相关的“组”模型上使用基于角色的身份验证。我设置了父节点,但忽略了从用户模型中取出作为请求者的角色。评论说这是一种魅力——我实际上并不需要用户(只是组)使用ARO对象。请把你的评论作为回答,这样我才能接受。@Andy:你应该写下关于采取行动的信息,作为这个问题的正式答案,因为我认为这可能适用于很多情况。Cake教程告诉您将其放在那里,但如果您只进行组级ACL,则没有必要这样做。