2009-09-08 3 views
0

Я пытаюсь реализовать комманду аутентификации/авторизации на моем сайте cakePHP с использованием компонентов Auth и Acl, но что-то странное происходит с моей реализацией. У меня есть правильные таблицы acos, aros и aros_acos, и они, похоже, работают на некотором уровне.cakephp acl aros_acos paradox

Я сопоставили свои действия так:

$ this-> Auth-> mapActions (массив ('прочитать' => Array ('вид'), 'Обновление' => Array ('редактировать')));

Моя экоса таблица выглядит следующим образом:

    1. сайт
  • 1.1 Страница
  • 1.2 Пользователи
  • 1.3 Группа
  • 1,4 Администратор

и AROS стол:

    1. пользователи
  • 1.1 Редакторы
  • 1.1.1 администраторы
  • 1.1.1.1 ADMIN_NAME
  • 1.2 regular_user

Пользователи, редакторы и администраторы - это группы. Admin_name - пользователь admin, член группы admins, а regular_user является членом группы пользователей.

Теперь, в таблице aros_acos, если я даю группе пользователей права CRUD для «страницы» следующим образом: 0 1 1 0 (что дает им право читать и обновлять), тогда все работает нормально (при меньше всего для действий «просмотра» и «редактирования»). Но если я ставлю 0 1 0 0 (только право на чтение), то я перенаправляюсь к '/', и одна вещь, которую я заметил, это то, что она не вызывает app_controller или, по крайней мере, функцию beforeFilter() в app_controller.

Кроме того, я написал beforeFilter(), чтобы, когда пользователь не имеет доступа к crud, чтобы дать ему флэш-сообщение $ this->, сообщив ему, что он «не авторизован» (I должен был это сделать, поскольку $ this-> Auth-> authError, похоже, не работает). Поэтому, имея в виду это, я теперь переписываю таблицу aros_acos для группы пользователей следующим образом: 0 0 1 0 (разрешение только для обновления), и на этот раз я получаю сообщение со вспышкой, когда я обращаюсь к действию «view» (что правильно так как у меня нет доступа к нему), но я также получаю сообщение со вспышкой, когда пытаюсь получить доступ к действию «изменить».

Мне что-то не хватает, и я не знаю, что. Я написал этот вопрос, надеясь, что до его завершения я сам придумаю решение ... но не повезло. Я все еще не знаю, что происходит, я думаю, это какая-то контрольная вещь ... У вас есть идеи?

ответ

1

Мысль 1 -> Где-то на странице просмотра у вас есть запрос на другую страницу случайно? Это может произойти с страницы просмотра или элемента на странице просмотра.

Мысль 2 -> Изложите свою полную карту. Это может не быть проблемой, но здесь хорошо начать.

$this->Auth->mapActions(array(
'read'=>array('index','view','admin_index'), 
'create'=>array('add','admin_add'), 
'update'=>array('edit','admin_edit'), 
'delete'=>array('delete','admin_delete'))); 

Не бойтесь проследить код вплоть до компонента Auth, если это необходимо. Просто pr(), пока не найдете, где он перенаправляется. Выясните, что именно вызывает проблему.

Убедитесь, что ваша сессия верна и не изменяется в процессе.

Мысль 3 -> Правильно ли вы «перестроили» таблицы acl? Это может быть проблема с данными. Я бы предположил, что вы используете функции createAco(), createAro() и $ this-> Acl-> allow(), чтобы убедиться, что данные верны, и все ключи правильные. (никогда не болит проверять)

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

+0

Благодарим за ответ. Эти последние дни я пытался отследить свою проблему, но мне не удалось ее найти. Так что, в конце концов, я просто исправил это с помощью линии маршрутизации. Итак, теперь я направляю '/' на страницу входа. Кажется, это работает. Я не знаю, нормально ли это решение, на самом деле я уверен, что это не так, но в любом случае у меня есть крайний срок, и это решение работает на всех уровнях (что я тестировал). Теперь, если пользователь пытается получить доступ к несанкционированной раздаче, он отправляется на страницу входа и на этой странице он получает уведомление $ this-> Auth-> authError. Во всяком случае, спасибо за поддержку. – Progenitura

 Смежные вопросы

  • Нет связанных вопросов^_^