Я пытаюсь реализовать комбинацию аутентификации / авторизации на моем сайте cakePHP с использованием компонентов Auth и Acl, но с моей реализацией происходит что-то странное. У меня есть правильные таблицы acos, aros и aros_acos, и они, кажется, работают на каком-то уровне.
Я нанес на карту свои действия следующим образом:
$ this-> Auth-> mapActions (array ('read' => array ('view'), 'update' => array ('edit')));
Моя таблица acos выглядит так:
- Site
- 1.1 Страницы
- 1.2 Пользователи
- 1.3 Группы
- 1.4 Администратор
и таблица арос:
- users
- 1.1 редакторы
- 1.1.1 админы
- 1.1.1.1 admin_name
- 1.2 обычный_пользователь
Пользователи, редакторы и администраторы - это группы. Admin_name - это пользователь с правами администратора, член группы администраторов, а regular_user - член группы пользователей.
Теперь, в таблице aros_acos, если я дам группе 'users' права CRUD для 'страницы' следующим образом: 0 1 1 0 (что дает им право читать и обновлять), тогда все работает нормально (по крайней мере, для ' просмотр и редактирование действий). Но если я поставлю 0 1 0 0 (только право на чтение), то меня перенаправят на '/', и я заметил одну особенность: он не вызывает app_controller или, по крайней мере, функцию beforeFilter () в app_controller.
Более того, я написал beforeFilter (), чтобы, когда пользователь не имеет доступа к crud, выдавать ему флэш-сообщение $ this->, давая ему знать, что он «не авторизован» (мне пришлось сделать это , поскольку $ this-> Auth-> authError, похоже, не работает). Итак, имея это в виду, я теперь переписываю таблицу aros_acos для группы пользователей следующим образом: 0 0 1 0 (разрешение только на обновление), и на этот раз я получаю флэш-сообщение, когда получаю доступ к действию 'view' (что правильно поскольку у меня нет разрешения на доступ к нему), но я также получаю флэш-сообщение, когда пытаюсь получить доступ к действию «редактировать».
Я что-то упускаю и не знаю что. Я написал этот вопрос, надеясь, что, прежде чем закончить, сам придумаю решение ... но не повезло. Я до сих пор не знаю, что происходит, думаю, это какая-то штука с контроллером ... Есть идеи?