Делать учебник CakePHP Acl. Я не могу заполнить aros_acos - PullRequest
2 голосов
/ 24 января 2010

Я мог бы поклясться, что сделал учебник правильно, но я получаю сообщение об ошибке, и моя таблица aros_acos пуста.

Что я уже сделал:

  1. На этой странице: http://book.cakephp.org/view/646/Creating-ACOs Я запустил «Корневые контроллеры Cake Acl Create ACO», и он вернул «Новые контроллеры Aco созданы». Я также добавил "$ this-> Auth-> actionPath = 'controllers /';" в beforeFilter () AppsController. Я не понимаю другой кусок кода, так как он плохо объяснил, куда он должен идти - что именно он подразумевает под «использованием AclComponent»?

  2. Я запустил build_acl () с этой страницы: http://book.cakephp.org/view/647/An-Automated-tool-for-creating-ACOs Он заполнил мою таблицу «acos» 46 записями.

  3. Это страница, на которой, по моему мнению, кроются проблемы: http://book.cakephp.org/view/648/Setting-up-permissions Я скопировал код, найденный на этой странице, в свой файл apps_controller.php и слегка изменил его, чтобы указать идентификаторы групп, которые я ' м с использованием:

    функция initDB () { $ group = & $ this-> User-> Group;

    //Allow admins to everything
    $group->id = 5;
    $this->Acl->allow($group, 'controllers');
    
    //allow managers to posts and widgets
    $group->id = 6;
    $this->Acl->deny($group, 'controllers');
    $this->Acl->allow($group, 'controllers/Posts');
    $this->Acl->allow($group, 'controllers/Widgets');
    
    //allow users to only add and edit on posts and widgets
    $group->id = 7;
    $this->Acl->deny($group, 'controllers');
    $this->Acl->allow($group, 'controllers/Posts/add');
    $this->Acl->allow($group, 'controllers/Posts/edit');
    $this->Acl->allow($group, 'controllers/Widgets/add');
    $this->Acl->allow($group, 'controllers/Widgets/edit');
    

    }

Я также взял все ссылки на позволенные действия от моих контроллеров пользователей и групп и добавил правильный код в свои сообщения, виджеты и страницы AppController ...

При запуске initDB () внутри AppController, посетив http://localhost/basic_cake2/groups/initDB, я получаю предупреждающее сообщение в верхней части моего экрана. Там написано:

DbAcl :: allow () - Неверный узел [ОСНОВНОЙ / торт / LIBS / контроллер / компоненты / acl.php, строка 325]

КОНТЕКСТ:

$ aro = stdClass stdClass :: $ id = 5 $ aco = "controllers" $ actions = "*" $ value = 1 $ perms = false $ permKeys = array ("_create", "_read", "_update", "_delete") $ save = array ()

КОД:

    if ($perms == false) {
        trigger_error(__('DbAcl::allow() -

Неверный узел ', true), E_USER_WARNING);

И ТАКЖЕ ПОКАЗЫВАЕТ:

DbAcl :: allow () - ОСНОВНОЙ / торт / LIBS / контроллер / компоненты / acl.php, строка 325 AclComponent :: allow () - ОСНОВНОЙ / торт / LIBS / контроллер / компоненты / acl.php, строка 101 AppController :: initDB () - APP / app_controller.php, строка 23 Object :: dispatchMethod () - CORE / cake / libs / object.php, строка 116 Диспетчер :: _ invoke () - CORE / cake / dispatcher.php, строка 227 Dispatcher :: dispatch () - CORE / cake / dispatcher.php, строка 194 [main] - APP / webroot / index.php, строка 88

При проверке таблицы aros_acos я обнаружил, что ничего не было добавлено!

Поэтому аутентификация не работает ни на одной странице ... :( У кого-нибудь есть идеи? Я понятия не имею, как это отладить, и я спросил на #cakephp, но в ответ они молчали и просто сказали мне перечитать документацию.

EDIT: Итак, я немного прочел учебник сложнее и оказалось, что я запускаю функцию из неправильного файла. Я переместил его в контроллер пользователей, и он добавил 3 строки в таблицу aros_acos.

Тем не менее, я все еще получаю это сообщение об ошибке, поэтому я думаю, что что-то все еще идет не так!

Контекст сообщения об ошибке, похоже, изменился, что интересно. Теперь оно гласит:

$ aro = Группа

Group :: $ name = "Group"

Group :: $ validate = array

Group :: $ hasMany = array

Группа :: $ actAs = массив

Group :: $ useDbConfig = "default"

Group :: $ useTable = "groups"

Group :: $ displayField = "name"

Группа :: $ id = 6

Группа :: $ data = array

Group :: $ table = "groups"

Group :: $ primaryKey = "id"

Group :: $ _ schema = array

Group :: $ validationErrors = array

Group :: $ tablePrefix = ""

Group :: $ alias = "Группа"

Group :: $ tableToModel = array

Group :: $ logTransactions = false

Группа :: $ транзакция = ложь

Group :: $ cacheQueries = false

Group :: $ assignTo = array

Group :: $ hasOne = array

Group :: $ hasAndBelongsToMany = array

Group :: $ Behaviors = BehaviorCollection объект

Group :: $ whitelist = array

Group :: $ cacheSources = true

Group :: $ findQueryType = NULL

Группа :: $ recursive = 1

Группа :: $ order = NULL

Группа :: $ __ существует = NULL

Group :: $ __ associationKeys = array

Группа :: $ __ association = массив

Group :: $ __ backAssociation = array

Группа :: $ __ insertID = NULL

Group :: $ __ numRows = NULL

Группа :: $ __agedRows = NULL

Group :: $ _ findMethods = array

Группа :: $ _ log = NULL

Группа :: $ Пользователь = Объект пользователя

Группа :: $ Aro = Aro объект

$ aco = "controllers / Posts"

$ actions = "*"

$ value = 1

$ perms = false

$ permKeys = array (

"_ создать",

"_ чтения",

"_ обновление"

"Удалить"

)

$ save = array ()

1 Ответ

6 голосов
/ 25 января 2010

Я исправил это. Для дальнейшего использования:

  1. Я удалил содержимое всех таблиц, чтобы начать с нуля.
  2. Я запускал initDB () из неправильного файла. Я правильно переместил его в контроллер пользователя. При его запуске больше не выдается сообщение об ошибке и добавляются правильные записи в aros_acos.

Исправлено!

...