创建具有aro和aco的aro / aco

时间:2011-02-24 11:34:16

标签: cakephp permissions acl

我正在尝试为我的应用程序实现PDF功能。所以,我在控制器中添加了一些新动作(比如'viewpdf')。 在此之后,我使用build_acl操作重建ACL树(来自Mark Story Tutorial Automated tool for creating ACOS)。 所以,我可以看到MySQL创建了一个新节点。 在此之前,一切都很好。但是现在我尝试测试viewpdf按钮,然后我得到一个'你无权访问该位置'。错误(甚至是管理员)。我检查了error.log文件,我看到了一个警告:

> Aco: controllers/Specializations/viewpdf in [/usr/share/php/cake/libs/controller/components/acl.php, line 273]
2011-02-24 11:40:34 Warning: Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check.  Node references:
Aro: Array
(
    [User] => Array
        (
            [id] => 1
            [email] => admin@gmail.com
            [group_id] => 1
        )

)

Aco: controllers/Specializations/viewpdf in [/usr/share/php/cake/libs/controller/components/acl.php, line 273]

然后我检查数据库中的aros_acos表,我发现没有'viewpdf'ACO与任何节点相关,所以有一个ARO,一个ACO,但不是ARO_ACO,所以我想这就是为什么我得到这个错误。

¿我的假设是对的吗?如果是,我怎么能创建这个aro_aco?如果我手动做的话,我担心会破坏任何东西......

提前致谢,

阿尔夫。

2 个答案:

答案 0 :(得分:1)

alfizqu,

如果您有ARO和ACO,但ACO_ARO表中的条目之间没有连接,这意味着您尚未设置ARO对ACO的权限。

继续这样:

/*
 * Copied from the tutorial, and modified, this function initializes the per-
 * missions for accessing controller actions.
 */
  function initDB() {
    $group =& $this->User->Group;

    // A D M I N S
    $group->id = 3;     
    $this->Acl->allow($group, 'controllers');

    // M A N A G E R S
    $group->id = 2;
    $this->Acl->deny($group, 'controllers');
    $this->Acl->allow($group, 'controllers/Items','*'); ... ...

设置了这样的initDB功能后,必须通过浏览器调用它来运行一次。 如果这不足以帮助您回到轨道上,请再次查看基本的AUTH / ACL教程。 你的,本杰明。

编辑1: 其中一个关键点是在自定义控制器的parent::beforeFilter()方法中调用beforeFilter()并正确设置app_controller。 如果这些技巧没有帮助,最节省时间的方法是从新鲜的蛋糕环境开始仔细检查ACL / AUTH教程 very 。一旦你能够在那里开始运行,你就有信心在你的应用程序中完成它。

编辑2: 并且不要害怕丢弃与您的应用程序相关的所有ACL / AUTH。这听起来令人生畏,但它可以安全地调试很多头疼/时间。

P.S。:Btw在面包店应该有一些适度可用的ACL / AUTH插件,在sourceforge应该有一个。

答案 1 :(得分:0)

尝试在此类用户控制器中创建示例操作

function install(){
     $aco = new Aco();
     $aco->create();
     $aco->save(array(
         'parent_id' => <Id of the Specializations in acos table>,
     'alias' => 'viewpdf',
     ));


    $this->Acl->allow('admin','controllers/Specializations/viewpdf','*');
}

如果你运行动作,将在acos表中创建一个新的Aco节点。对于管理员用户,你可以给予完整的权限。你可以使用任何有效的用户(用户名应该在Aros表中)而不是管理员。

希望它有所帮助。