首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建具有aro和aco的aro/aco

创建具有aro和aco的aro/aco
EN

Stack Overflow用户
提问于 2011-02-24 19:34:16
回答 2查看 2.1K关注 0票数 1

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

代码语言:javascript
复制
> 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]

然后我检查数据库中的viewpdf表,我看到没有与任何节点相关的'viewpdf‘ACO,所以有一个ARO,一个ACO,但没有ARO_ACO,所以我想这就是我得到这个错误的原因。

我的假设是正确的吗?如果是,我如何创建此aro_aco?我担心如果我手动做的话我可能会弄坏任何东西...

提前谢谢你,

阿尔夫。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-25 16:58:17

阿尔菲兹曲

如果您有ARO和ACO,但它们之间没有通过ACO_ARO表中的条目进行连接,这意味着您尚未设置ARO在ACO上拥有的权限。

如下所示:

代码语言:javascript
复制
/*
 * 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:其中一个关键点是在自定义控制器的beforeFilter()方法中调用parent::beforeFilter(),并正确设置app_controller。如果这些技巧不起作用,最省时的方法是非常仔细地复习ACL/AUTH教程,从一个新的环境开始。一旦你可以在那里启动并运行它,你就有信心在你的应用程序中做到这一点。

编辑2:,不要害怕扔掉所有与你的应用程序相关的ACL/AUTH。这听起来有点吓人,但它可以省去很多调试麻烦/时间。

附言:顺便说一句,面包店应该有一些中等可用的ACL/AUTH插件,sourceforge也应该有一个。

票数 1
EN

Stack Overflow用户

发布于 2011-02-24 22:05:02

尝试在用户控制器中创建一个示例操作,如下所示

代码语言:javascript
复制
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节点。对于管理员用户,u可以给出整个permission.you,可以使用任何有效的用户(用户名应该在Aros表中)来代替管理员。

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5104072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档