我正在尝试为我的应用程序实现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?如果我手动做的话,我担心会破坏任何东西......
提前致谢,
阿尔夫。
答案 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表中)而不是管理员。
希望它有所帮助。