Теперь я должен что-то упустить в своем приложении, контролируемом ACL.Моя модель User принадлежит модели под названием Role.Я включил поведение ACL в обеих моделях.Обе модели имеют функции parentNode - в Role это возвращает нуль.В User код ниже:
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');
ИмеюВ базе данных подтверждено, что это сработало.