2013-04-09 4 views
1

Я новичок в ACL в CakePHP. Я считаю, что моя группа «Администратор» настроена правильно с полным доступом к ACO 'controllers'. Однако я получаю сообщение об ошибке, когда пытаюсь перейти к любому контроллеру или действию, которое явно не публикуется.ACO alias не работает с значением «контроллеры/контроллер»

Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check. Node references: 
Aro: Array 
(
    [User] => Array 
     (
      [id] => 9 
      [email] => Admin 
      [group_id] => 3 
      [is_active] => 1 
      [created] => 2013-04-08 07:59:52 
      [modified] => 2013-04-08 07:59:52 
      [Group] => Array 
       (
        [id] => 3 
        [name] => Administrators 
        [user_count] => 2 
        [created] => 2013-04-08 06:34:58 
        [modified] => 2013-04-08 06:34:58 
       ) 

     ) 

) 

Aco: controllers/Users/index [CORE/Cake/Model/Permission.php, line 94] 

В моей acos таблице есть запись для 'controllers/Users/index' в качестве псевдонима. Эта запись имеет parent_id, которая ссылается на 'controllers/Users', который, в свою очередь, имеет parent_id, который ссылается на 'controllers'.

В моей таблице 'aros_acos' есть только одна запись, которая предоставляет полное разрешение группе «Администраторы».

Основываясь на приведенной выше ошибке, я немного искал и обнаружил, что если я попытаюсь позвонить $this->Acl->Aco->node('controllers/Users/index');, то возвращается значение false. Но если я сделаю тот же запрос на $this->Acl->Aco->node('controllers');, возвращаемое значение будет правильным массивом.

Что-то явно не работает должным образом, но я не могу понять, где я ошибаюсь. Я весь день копаю в Документационной книге и API и не нашел причин, почему 'controllers/Users/index' не найден, но 'controllers' есть. На данный момент похоже, что это имеет какое-то отношение к персонажу /, но я не знаю почему. Я использовал ту же строку при добавлении Aco и сохранил ее правильно.

Спасибо!

ответ

1

Я нашел эту проблему, установив ACL Plugin по адресу: http://www.alaxos.net/blaxos/pages/view/plugin_acl_2.0

После выполнения этой большой утилиты я обнаружил, что я неправильно добавить мои АСОсы с путем заполнения в псевдониме. Оказывается, псевдоним - это только имя действия или контроллера, и на основе parent_id он находит правильный путь.

Это не очень хорошо документировано в документации CakePHP, но что еще нового.

Пример:

я добавлением 'controllers/Users/index' вместо 'index'.

Надеюсь, это поможет кому-то еще решить эту проблему! Я потратил целый день на это.