Есть ли в CakePHP 1.3 какое-либо преимущество использования $this-›Controller-›Session по сравнению с $this-›Session в компоненте?

Я использую модифицированную версию компонентов SimpleAuth/SimpleAcl от Felix Geisendörfer, которые я объединил в один компонент Simple_Authable.

Я изменил его функцию startup() на initialize(), чтобы не загромождать функцию beforeFilter в моем app_controller.

Одна из вещей, которые делает этот компонент, — это проверка того, кто является активным пользователем, и если этот пользователь не может быть найден, он либо ищет его на основе основного User.id, либо использует «гость». В любом случае компонент использует $this->Controller->Session->write() для сохранения информации об активном пользователе или госте.

Я также использую плагин Felix Authsome вместо стандартного компонента аутентификации CakePHP.

Когда я вхожу в систему, активный пользователь, очевидно, является гостем.

После того, как я отправил форму, активный пользователь все еще является гостем, потому что функция initialize() компонента срабатывает раньше всего остального. Затем подключаемый модуль Authsome вступает в игру и проверяет моего пользователя как «root», а также вызывает $this->SimpleAuthable->setActiveUser($id, true); чтобы заставить SimpleAuthable обновить информацию об активном пользователе, которую он хранит, через $this->Controller->Session; Затем меня перенаправляют, и моя простая информация о сеансе и вкладка сеанса DebugKit отражают, что я действительно являюсь пользователем root.

Однако, когда я пытаюсь перейти на страницу «администратора», скажем, /admin/users/index, о чудо, SimpleAuthable думает, что я все еще «гостевой» пользователь, потому что когда он выполняет $this->Controller->Session ->read() вызывает ключ, содержащий мой идентификатор пользователя, он получает пустой ответ, т. е. данные, хранящиеся на предыдущей странице, не сохраняются.

Возможно, между Authsome и SimpleAuthable происходит что-то странное, но все выглядит довольно просто, и, на мой взгляд, $this->Controller->Session должен сохранять и сохранять записанные в него данные.

Итак, я рассматриваю рефакторинг всех вызовов $this->Controller->Session и замену их на $this->Session, но сначала я хотел поделиться этим с сообществом и посмотреть, видел ли кто-нибудь что-нибудь подобное, и если так как они это решили.

С уважением, Кристофер.


person Christopher Vrooman    schedule 11.03.2010    source источник


Ответы (1)


Я обнаружил проблему... Я также использую плагин Permissionable Джошуа МакНиза, и мне нужно было отключить его для $this->Controller->{$this->userModel}->findById($id); в моем компоненте SimpleAuthable, когда я пытаюсь найти текущего активного пользователя.

Примечание для себя: я бы понял это быстрее, если бы у меня было модульное тестирование :(.

person Christopher Vrooman    schedule 11.03.2010