Мой проект Cake Php перенаправляет на неправильный URL после того, как я выполнил полную реализацию ACL, следуя этому руководству -> http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/simple-acl-controlled-application.html.
Проблема —
Правильный редирект -> localhost / appname /
Перенаправление после того, как я реализовал ACL -> localhost / appname / appname /
Это перенаправление, которое происходит после входа в систему. Публичные страницы (логин) работают нормально.
Ниже приведен код контроллера приложения
public $components = array( 'Acl',
'Auth' => array(
'authorize' => array(
'Actions' => array('actionPath' => 'controllers')
)
),
'Session'
);
public $helpers = array('Html', 'Form', 'Session');
// only allow the login controllers only
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('login');
}
Скриншот таблицы Acos
Скриншот таблицы Aros
Скриншот таблицы Aros_Acos
таблица групп
routes.php
Router::connect('/dashboard', array('controller' => 'dashboards', 'action' => 'index'));
Router::connect('/login', array('controller' => 'users', 'action' => 'login'));
Router::connect('/logout', array('controller' => 'users', 'action' => 'logout'));
Router::connect('/', array('controller' => 'dashboards', 'action' => 'index'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
CakePlugin::routes();
require CAKE . 'Config' . DS . 'routes.php';
Правый URL открывался, когда я использовал только «Auth» вместо следующего.
'Auth' => array(
'authorize' => array(
'Actions' => array('actionPath' => 'controllers')
)
),
НО, тогда ACL не работает.
Судя по вставленному коду, вы не настроили перенаправление входа в систему. Я ожидаю, что ваш beforeFilter в контроллере приложения будет выглядеть примерно так:
public function beforeFilter() {
//Configure AuthComponent
$this->Auth->loginAction = array(
'controller' => 'users',
'action' => 'login'
);
$this->Auth->logoutRedirect = array(
'controller' => 'foo',
'action' => 'bar'
);
$this->Auth->loginRedirect = array(
'controller' => 'foo',
'action' => 'bar'
);
}
В вашем случае вы, похоже, хотите, чтобы вошедший в систему пользователь вернулся на домашнюю страницу, поэтому в этом примере ваша домашняя страница будет определена в app / config / rout.php как действие панели контроллера foo.
В контроллере, где вы определяете действие входа в систему (обычно это пользовательский контроллер), вы также можете добавить перенаправление, что-то вроде:
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
// Redirect the user to home
return $this->redirect($this->Auth->redirect(array('controller'=>'foo', 'action'=>'bar')));
}
}
}
Кажется, вам не хватает компонента ACL в вашем массиве компонентов AppController. Попробуйте обновить его до:
public $components = array(
'Acl',
'Auth' => array(
'authorize' => array(
'Actions' => array('actionPath' => 'controllers')
)
),
'Session'
);
Других решений пока нет …