Я мог бы поклясться, что сделал учебник правильно, но я получаю сообщение об ошибке, и моя таблица aros_acos пуста.
Что я уже сделал:
На этой странице: http://book.cakephp.org/view/646/Creating-ACOs
Я запустил «Корневые контроллеры Cake Acl Create ACO», и он вернул «Новые контроллеры Aco созданы». Я также добавил "$ this-> Auth-> actionPath = 'controllers /';" в beforeFilter () AppsController. Я не понимаю другой кусок кода, так как он плохо объяснил, куда он должен идти - что именно он подразумевает под «использованием AclComponent»?
Я запустил build_acl () с этой страницы: http://book.cakephp.org/view/647/An-Automated-tool-for-creating-ACOs
Он заполнил мою таблицу «acos» 46 записями.
Это страница, на которой, по моему мнению, кроются проблемы: 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 ()