2 сентября обновление:
Это стало очень трудной головоломкой для решения. Настройка базовой аутентификации, а это все, чего я хочу, должно включать очень мало шагов. Я провел много тестов, добавляя и удаляя код, просматривая руководство по тортам, читая учебники и шаг за шагом просматривая поваренную книгу по разработке приложений cakePHP 1.3 от Mariano Iglesias - хорошая книга. http://goo.gl/93BGw
Но проблема, с которой я все еще сталкиваюсь, заключается в том, что контроллер приложения - это единственное место, где работают «разрешенные» действия. В отдельных контроллерах родитель: beforeFilter не распознается, и я перенаправлен обратно на страницу входа пользователей.
Любая помощь с этим действительно приветствуется. Что мне интересно, так это то, как я могу отладить этот тип проблемы. Есть ли другие параметры конфигурации, на которые мне следует обратить внимание, например, «префиксная маршрутизация»?
=======================
Обновление 1 сентября:
После многих испытаний возникает проблема в том, что «before: filter» в отдельных контроллерах не распознается. Пример в пост-контроллере:
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow = array('edit');
}
Кто-нибудь имел это раньше? Я сослался на руководство по cakePHP, а также на множество онлайн-статей и руководств, и для меня это не имеет никакого смысла. Я даже пытался создать простое приложение, используя только пользователей и постконтроллер, и до сих пор настройки: фильтры каждого контроллера не распознаются.
=======================
Оригинальный вопрос.
Я использую компонент авторизации Cakephp для управления разделом администратора. Это использует версию 1.3.11
Проблема, с которой я сталкиваюсь, заключается в том, что даже при разрешенных действиях на каждом контроллере меня перенаправляют на страницу входа пользователя.
Вот что в контроллере приложения:
class AppController extends Controller {
var $components = array(
'Auth' => array(
'authorize' => 'controller'
),
'Session',
'RequestHandler'
);
public function isAuthorized() {
return true;
}
function beforeFilter(){
$this->Auth->authorize = 'controller';
$this->Auth->fields = array('username' => 'username', 'password' => 'password');
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->authError = 'Please login to view that page ';
$this->Auth->loginError =' The user name or password you entered did not work, please try again ' ;
$this->Auth->allow('display');
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'logout');
$this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'display', 'home');
}
Вот что в контроллере пользователя:
класс UsersController расширяет AppController {
var $name = 'Users';
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow = array('add');
}
Это то, что находится в контроллере сообщений:
class PostsController extends AppController {
var $name = 'Posts';
var $components = array('Session','RequestHandler', 'Email');
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow = array('edit');
}
Я обнаружил, что после входа в систему я могу получить доступ к домашней странице, как и ожидалось. Затем, когда я иду к выходу из системы, сессия не полностью уничтожается, поэтому я могу вернуться к разделу 'admin'.
Я попытался использовать $ this-session ('destroy'); в действии выхода из системы, но когда я это сделал, разрешенные действия больше не работали.
Имеет ли это смысл? Разве разрешенные действия не должны быть независимыми от текущего сеанса?
Спасибо, Пол