我是CakePHP中的ACL新手。我相信我的管理员组已正确设置,可以完全访问'controllers'
ACO。但是,当我尝试转到未明确公开的任何控制器或操作时,我收到错误。
Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check. Node references:
Aro: Array
(
[User] => Array
(
[id] => 9
[email] => Admin
[group_id] => 3
[is_active] => 1
[created] => 2013-04-08 07:59:52
[modified] => 2013-04-08 07:59:52
[Group] => Array
(
[id] => 3
[name] => Administrators
[user_count] => 2
[created] => 2013-04-08 06:34:58
[modified] => 2013-04-08 06:34:58
)
)
)
Aco: controllers/Users/index [CORE/Cake/Model/Permission.php, line 94]
在我的acos
表格中,'controllers/Users/index'
有一个条目作为别名。此条目有一个引用'controllers/Users'
的parent_id,后者又有一个引用'controllers'
的parent_id。
我的'aros_acos'
表中只有一个条目授予管理员组完全权限。
根据上面的错误,我做了一点挖掘,发现如果我直接尝试调用$this->Acl->Aco->node('controllers/Users/index');
,则返回的值为false
。但是如果我在$this->Acl->Aco->node('controllers');
上执行相同的查询,则返回的值是正确的数组。
某些事情显然不能正常运作,但我无法弄清楚我哪里出错了。我整天都在深入阅读文档手册和API,但没有找到任何原因导致找不到'controllers/Users/index'
但'controllers'
的原因。在这一点上,它似乎与/
字符有关,但我不知道为什么。我在添加Aco时使用了相同的字符串,并且保存得当。
谢谢!
答案 0 :(得分:1)
我通过在以下位置安装ACL插件找到了问题: http://www.alaxos.net/blaxos/pages/view/plugin_acl_2.0
运行这个很棒的实用程序后,我发现我错误地在别名中添加了带有填充路径的ACO。事实证明,别名只是动作或控制器名称,并且基于parent_id,它找到了正确的路径。
这在CakePHP文档中没有很好地记录,但还有什么是新的。
示例:
我添加了'controllers/Users/index'
而不是'index'
。
希望这可以帮助别人解决这个问题!我浪费了整整一天的时间。