现在我必须在ACL控制的应用程序中遗漏一些东西。我的用户模型属于名为Role的模型。我在两个模型中都包含了ACL行为。两个模型都有parentNode函数 - 在Role中,返回null。在用户中,代码如下:
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的用户身份登录。在我的aros表中,用户的parent_id为9,这是正确角色的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表中没有任何条目。该表中的唯一条目是Role aros。
任何人都可以对此有所了解吗?
感谢。
编辑 - 以防万一不清楚,预期的行为是禁止用户和角色访问此控制器('国家')。
编辑 - 我确实分配了权限,如下所示:
$this->Acl->deny('City admin','Countries');
我已在数据库中验证过这是有效的。