2012-12-13 43 views
3

我在CakePHP中使用ACL用户记录结果2.3.0-RC1CakePHP的2.0 ACL - 更新中ARO错误

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

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

+0

从未使用Aro,但是如果您执行'debug($ aro);'在页面上是包含任何无效数据的数组? – Grambot

+4

看起来用户没有该对象的acl条目。 –

+0

@ColbyGuyer是正确的,用户缺少ARO记录,因此你的ACL检查在试图找到它时会抛出错误。通常在ACL设置中,User模型具有添加ARO的afterSave。确保发生。 – jeremyharris

回答

1

根据评论我只是写这个答案。

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

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

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

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。而且你要实现的绑定方法:

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

}

这为我工作。