未登录时的cakePHP ACL

未登录时的cakePHP ACL,php,cakephp,Php,Cakephp,我有一个所有用户都必须登录的应用程序。我使用Auth组件进行身份验证,使用ACL进行授权 我基本上是在管理控制器的“beforeFilter()中执行类似的操作: if(!$this->Acl->check(array('model' => 'User', 'foreign_key' => $this->Auth->user()['id']), 'Admin', 'read')) { pr('You are NOT allowed to be her

我有一个所有用户都必须登录的应用程序。我使用
Auth
组件进行身份验证,使用
ACL
进行授权

我基本上是在管理控制器的“beforeFilter()中执行类似的操作:

if(!$this->Acl->check(array('model' => 'User', 'foreign_key' => $this->Auth->user()['id']), 'Admin', 'read')) 
{
    pr('You are NOT allowed to be here!');
} 
这适用于任何登录的用户,有些用户可以看到管理页面,有些用户不能

但是,当我在未登录时转到/admin时,我会得到:

AclNode::node()-找不到由标识的Aro节点 “数组([Aro0.model]=>model[Aro0.foreign\U key]=>U) "

(我不知道为什么它会打印“U”)。这就像它试图进行查找,但由于用户信息不在那里,它崩溃了。我肯定我错过了什么。我可以通过检查用户是否登录来避免此问题:

if($this->Auth->user()) //do the ACL check
但我不喜欢这种方法,我想这是错误的


我需要某种默认设置吗?

该错误意味着您的数据库中没有acos中的节点。 关系的外键也是错误的!也许你应该检查一下,然后我会给你更多你不明白的细节


在beforeFilter()中,您应该只有Guest允许的权限,其余权限在DB中。

谢谢您的回答。我不熟悉ACL的东西,文档也很混乱。我不明白为什么我在acos中没有它,因为当我是一个登录用户时它确实工作。还有,为什么外键错了?它指向已登录的用户。