0

我在使用 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 的代码,但我正在为此苦苦挣扎......

4

1 回答 1

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 表。仔细 阅读本书中的这一部分。它与您正在做的事情直接类比 - 只需Group在教程中替换为Role. 使用该行为还将帮助您使用 AclBehavior::node() 方法,该方法将帮助您轻松获取节点引用,而无需直接在 Aro 和 Aco 模型上进行查找。

于 2014-02-06T16:56:31.620 回答