Cakephp 不能';t查找由“确定的Aco节点”;数组([Aco0.model]=>;model[Aco0.foreign_key]=>;U)";

Cakephp 不能';t查找由“确定的Aco节点”;数组([Aco0.model]=>;model[Aco0.foreign_key]=>;U)";,cakephp,Cakephp,我将通过以下链接在我的应用程序中使用Acl组件 在usersController中,我有一个安装aros和acos的功能 public function install(){ $aro = $this->Acl->Aro; $aco = $this->Acl->Aco; $aro_groups = array( 0 => array( 'alias' => 'admin'

我将通过以下链接在我的应用程序中使用Acl组件

在usersController中,我有一个安装aros和acos的功能

public function install(){

    $aro = $this->Acl->Aro;
    $aco = $this->Acl->Aco;


    $aro_groups = array(

        0 => array(

            'alias' => 'admin'
        ),

        1 => array(

            'alias' => 'operator'
        ),

        2 => array(

            'alias' => 'user'
        ),

    );

    $aco_groups = array(

        0 => array(

            'alias' => 'User'
        ),

        1 => array(

            'alias' => 'Supplier'
        ),

        2 => array(

            'alias' => 'Inventory'
        ),

        3 => array(

            'alias' => 'Invoice'
        ),

        4 => array(

            'alias' => 'Incentive'
        ),

        5 => array(

            'alias' => 'Promotion'
        ),

        6 => array(

            'alias' => 'Feedback'
        ),

        7 => array(

            'alias' => 'Message'
        ),

        8 => array(

            'alias' => 'History'
        ),

    );


    foreach($aro_groups as $data):

        $aro->create();
        $aro->save($data);


    endforeach;


    foreach($aco_groups as $data):

        $aco->create();
        $aco->save($data);


    endforeach;

    foreach($aco_groups as $data):

        $this->Acl->allow('admin',$data);
        $this->Acl->allow('operator',$data);

    endforeach;




}
我的用户模型如下:

public $belongsTo = array(
    'Role' => array(
        'className' => 'Role',
        'foreignKey' => 'role_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);
public function beforeSave($options = array()){
    if(isset($this->data['User']['password']))
    {
        $this->data['User']['password']= AuthComponent::password($this->data['User']['password']);


    }
}



public $actsAs = array('Acl' => array('type' => 'requester'));



public function parentNode() {
    if (!$this->id && empty($this->data)) {
        return null;
    }
    if (isset($this->data['User']['group_id'])) {
        $groupId = $this->data['User']['group_id'];
    } else {
        $groupId = $this->field('group_id');
    }
    if (!$groupId) {
        return null;
    } else {
        return array('Group' => array('id' => $groupId));
    }
}

public function bindNode($user) {
    return array('model' => 'Role', 'foreign_key' => $user['User']['role_id']);
}
榜样:

public $hasMany = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'role_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
);



public $actsAs = array('Acl' => array('type' => 'requester'));



public function parentNode() {

        return null;

}
现在,当我试图访问
/users/install
以检查是否成功创建了所有关系时,我遇到了这个错误

AclNode::node() - Couldn't find Aco node identified by "Array ( [Aco0.model] => model [Aco0.foreign_key] => U ) "

Warning (2): Illegal string offset 'id' [CORE\Cake\Model\AclNode.php, line 140]

在用户模型的parentNode函数中,您使用组id而不是角色id。 在您的用户模型中将所有出现的group\U id替换为role\U id,您应该可以,并将group替换为role

public function parentNode() {
if (!$this->id && empty($this->data)) {
    return null;
}
if (isset($this->data['User']['role_id'])) {
    $roleId = $this->data['User']['role_id'];
} else {
    $roleId = $this->field('role_id');
}
if (!$roleId) {
    return null;
} else {
    return array('Role' => array('id' => $roleId));
}

}

很抱歉,我在这里发布了旧的parentNode(),当时我正在使用groups表,我的新方法与您的相同