ACL, ARO и ACO, как их обновить, если есть новые разделы? - PullRequest
2 голосов
/ 01 апреля 2011

Я пытаюсь понять, как использовать AROs и ACOs, если я добавил раздел на свой сайт.

В руководстве CakePHP ясно, как концепция ACLработает, но не о том, как это должно быть реализовано в коде.Лично я обнаружил, что вся часть урока очень неясна относительно того, как их следует использовать внутри CakePHP фреймворка.Кажется, это самая недружелюбная часть CakePHP framework.

Теперь, когда я захожу в новые разделы, которые я создал, я получаю эту ошибку, и я не понимаю, как я мог ее исправить.

Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check.  Node references:
Aro: Array
(
    [User] => Array (
        [id] => 1
        [username] => vittorio
        [group_id] => 1
        [created] => 2011-03-30 10:51:23
        [modified] => 2011-03-30 10:51:23
        [viewable] => 0
    )

)

Aco: controllers/Works/index [CORE/cake/libs/controller/components/acl.php, line 273]

Если я посмотрю на
http://book.cakephp.org/view/647/An-Automated-tool-for-creating-ACOs
и на
http://book.cakephp.org/view/996/Creating-Components#!/view/1548/Creating-ACOs-Access-Control-Objects

, я должен получить ответы, но если я выполню этот код, вызывающий URL mysite.com/build_acl снова я получаю только эти ошибки:

Missing Controller

Error: BuildAclController could not be found.

Error: Create the class BuildAclController below in file: app/controllers/build_acl_controller.php

<?php
    class BuildAclController extends AppController {

    var $name = 'BuildAcl';
}
?>

Notice: If you want to customize this error message, create app/views/errors/missing_controller.ctp

Существует ли достойный гид, который говорит о ACL, AROs и ACOs и как их реализовать на CakePHP, не покидая читателяпотеряли?

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

Витторио

с должным уважением, ACL и AUTH в сочетании являются очень универсальным инструментом. Начало работы с ним в первый раз меня немного раздражало. Основные ошибки, которые я вижу снова и снова:

  • Не вызов build_acl после создания одного или нескольких новых действий.
  • Не инициализация вновь созданной установки (свежие ACL узлы как вывод предыдущий шаг) с правильным доступом прав.
  • Не вызов parent::beforeFilter() в каждом контроллере, который наследует от родителя app_controller (так как часто критические настройки находятся в этом методе).
  • Попытка сохранить настройку foobared вместо повторения учебника Auth + Acl в конце книги. Это работает (без обид), многие люди сделали это раньше, так что вы тоже можете (я не говорю, что это происходит мгновенно).
  • Повторное изобретение колеса: После базового функционирования Auth + Acl учебник , проверьте плагины на sourceforge и github .

  • Не изобретать велосипед ^^, аааа, идеальный плагин управления AUTH + ACL еще не написан (но полезный код существует)

Хорошего пути, Бенджамин.

Edit0 Базовая гигиена кода помогает, например, если вы разрешаете пользователям запрашивать объекты и действия как управляемые объекты, имеет смысл записать build_acl() в users_controller, за которым непосредственно следует, например, init_db(), где вы централизуете настройки прав доступа. Не забудьте удалить эти хаки перед началом работы, даже если установка правильных прав доступа снова не причинит большого вреда, но представьте, что Джон Доу и его друзья делают с вашим приложением, если они постоянно запускают эту функцию Ü

0 голосов
/ 01 апреля 2011
mysite.com/build_acl

вы должны запустить build_acl в любом действии вашего контроллера, вы не можете называть его так, как будто вы ссылаетесь на действие без контроллера.по крайней мере, вы можете попробовать вот так

mysite.com/{my_controller}/build_acl

или запустить его в методе beforeFilter app_controller, например,

function beforeFilter(){
  $this->build_acl();
}

Конечно, сама функция должна быть объявлена ​​в app_controller.

...