0

我有一个应用程序,所有用户都必须登录。我正在使用该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() - 找不到由“Array ([Aro0.model] => model [Aro0.foreign_key] => U)”标识的 Aro 节点

(我不知道为什么它会打印“U”)。就像它正在尝试进行查找一样,但是由于用户信息不存在,因此它崩溃了。我确定我在这里遗漏了一些东西。我可以通过检查用户是否登录来避免这个问题:

if($this->Auth->user()) //do the ACL check

但我不喜欢这种方法,我想这是错误的。

我需要某种默认设置吗?

4

1 回答 1

0

该错误意味着在您的数据库中您没有 acos 中的节点。关系的foreign_key也是错误的!也许你应该检查Cake Book - Simple Acl 控制的应用程序,然后我会给你更多关于你不明白的细节。

在 beforeFilter() 中,您应该只有访客允许,其余权限在数据库中。

于 2012-07-10T20:17:35.377 回答