我正在尝试将PDF功能实现到我的应用程序中。所以,我在控制器中添加了一些新的动作(比如'viewpdf')。在此之后,我使用build_acl操作(来自Mark Story Tutorial Automated tool for creating ACOS )重建ACL树。因此,我可以使用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]然后我检查数据库中的viewpdf表,我看到没有与任何节点相关的'viewpdf‘ACO,所以有一个ARO,一个ACO,但没有ARO_ACO,所以我想这就是我得到这个错误的原因。
我的假设是正确的吗?如果是,我如何创建此aro_aco?我担心如果我手动做的话我可能会弄坏任何东西...
提前谢谢你,
阿尔夫。
发布于 2011-02-25 16:58:17
阿尔菲兹曲
如果您有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:其中一个关键点是在自定义控制器的beforeFilter()方法中调用parent::beforeFilter(),并正确设置app_controller。如果这些技巧不起作用,最省时的方法是非常仔细地复习ACL/AUTH教程,从一个新的环境开始。一旦你可以在那里启动并运行它,你就有信心在你的应用程序中做到这一点。
编辑2:,不要害怕扔掉所有与你的应用程序相关的ACL/AUTH。这听起来有点吓人,但它可以省去很多调试麻烦/时间。
附言:顺便说一句,面包店应该有一些中等可用的ACL/AUTH插件,sourceforge也应该有一个。
发布于 2011-02-24 22:05:02
尝试在用户控制器中创建一个示例操作,如下所示
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表中)来代替管理员。
希望能有所帮助。
https://stackoverflow.com/questions/5104072
复制相似问题