2011-09-07 39 views
1

现在我必须缺少ACL控制应用程序中的某些内容。我的用户模型属于称为角色的模型。我在两种模型中都包含了ACL行为。这两个模型都有parentNode函数 - 在Role中,这返回null。在用户的代码如下:CakePHP Acl混淆 - 拒绝访问组,但该组的用户有权访问

public function parentNode() { 
    if (!$this->id && empty($this->data)){ 
     return null; 
    } 
    if (isset($this->data['User']['role_id'])){ 
     $roleId = $this->data['User']['role_id']; 
    } else { 
     $roleId = $this->field('role_id'); 
    } 
    if (!$roleId){ 
     return null; 
    } else { 
     return array('Role' => array('id' => $roleId)); 
    } 
} 

我登录在作为已经ROLE_ID = 8以我阿罗斯表中的用户,用户具有9的PARENT_ID,这对于正确的ARO条目角色。

我创建了以下行动来说明这个问题:

public function permissions(){ 
    $this->autoRender = false; 
    if($this->Acl->check(array('model'=>'User','foreign_key'=>$this->Auth->user('id')),'Countries')){ 
     echo 'User: Allowed<br />'; 
    }else{ 
     echo 'User: Forbidden<br />'; 
    } 
    if ($this->Acl->check(array('model'=>'Role','foreign_key'=>$this->Auth->user('role_id')),'Countries')){ 
     echo 'Role: Allowed'; 
    }else{ 
     echo 'Role: Forbidden'; 
    } 
} 

当我运行的动作,我得到:

User: Allowed 
Role: Forbidden 

用户条目没有在aros_acos表中的任何条目。该表中唯一的条目是用于角色的。

任何人都可以对此有所了解吗?

谢谢。

编辑 - 为防万一还不清楚,预期的行为将是禁止用户和角色访问此控制器('国家')。

编辑 - 我做分配权限,就像这样:

$this->Acl->deny('City admin','Countries'); 

我已经在数据库中,这已经工作了验证。

+0

你在哪里分配权限?你有没有检查食谱设置权限? – 8vius

+0

如果你在我的问题上提出了一些问题,也许我可以给你一个手 – 8vius

回答

0

因为您还没有回答我的问题,所以我只想在这里出去。你有没有选择this?

因为你没有显示它,所以不能确定,但​​是你应该设置你的权限并允许以该链接指定的方式进行操作。

+0

谢谢,我确实分配了我的权限,编辑了我的问题以包含此问题。 – Will

+0

将“国家/地区”更改为控制器/国家/地区 – 8vius