#cakephp #routing #admin #authentication
#cakephp #маршруты #администратор #аутентификация
Вопрос:
на веб-сайте моего клиента у меня есть раздел администратора — единственное, что моя маршрутизация администратора, похоже, не защищена паролем. Я добавил защиту администратора с помощью руководства по настройке пользовательской системы и поместил следующий код в app_controller.php:
function beforeFilter() {
// if an admin route is requested and not logged in
$user = $this->Session->read('User');
if(isset($this->params['admin']) amp;amp; $this->params['admin'] amp;amp; is_null($user)) {
// set Flash and redirect to login page
$this->Session->setFlash('You need to be logged in for that action.','default',array('class'=>'flash_bad'));
$this->redirect(array('controller'=>'users','action'=>'login','admin'=>FALSE));
}
}
и в моем app/config/routes.php У меня есть это:
Router::connect('/login', array('controller' => 'users', 'action' => 'login'));
Router::connect('/admin/logout', array('controller' => 'users', 'action' => 'logout'));
в котором, я почти уверен, чего-то не хватает для защиты.
Я все еще могу получить доступ к другим областям администрирования без входа в систему, т.Е. theowlhouse.com.au/admin/bookings .
Что я делаю не так? Страница администратора для модели users является единственной защищенной.
Спасибо 🙂
Комментарии:
1. какой учебник вы использовали? можете ли вы опубликовать ссылку?
Ответ №1:
Похоже, вы путаете префиксную маршрутизацию с использованием компонента аутентификации. Обратите внимание, что префиксная маршрутизация называлась «маршрутизацией администратора» до версии 1.3.
Вам не нужно использовать маршрутизацию администратора для использования компонента аутентификации. Давайте начнем с простой настройки компонента аутентификации. В вашем контроллере приложений убедитесь, что он включен в ваш массив компонентов:
var $components = array('Auth');
Как только вы это сделаете, пользователи будут перенаправлены на страницу входа, если они не вошли в систему. Чтобы разрешить анонимным пользователям доступ к действию, вы вызываете команду $this->Auth->allow('action name');
Так, например, скажем, вы хотите разрешить пользователям, не прошедшим проверку подлинности, использовать действия index () и view() в вашем контроллере элементов, но не add() или edit(). В вашем items_controller.php вы бы настроили beforeFilter() для выполнения вызова:
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow(array(
'index',
'view'
));
}
Комментарии:
1. Спасибо, Тайлер, я так понимаю, я отбрасываю другой фильтр before? и должен ли я удалить префиксы admin_ для функций администратора? cakephp уже знает, что для аутентификации должна использоваться модель Users? Кроме того, я не вижу ничего неправильного в вашем синтаксисе, но когда я изменил beforeFilter, я получаю неожиданную ошибку оператора T.
2. Правильно, вам следует заменить фильтр beforeFilter. Правильно, вам не нужно использовать префиксы ‘admin_’. Исправьте, что компонент аутентификации по умолчанию использует пользовательскую модель. Я отредактировал свой приведенный выше код, так как в нем отсутствовали > и закрывающая скобка.
3. спасибо, что вернулись ко мне — во-первых, я изменил свой app_controller beforeFilter () на обновленный login auth, однако мне любопытно, как бы я поступил с индексом для контроллера и admin_index … могу ли я просто ввести его в любом случае? моя проблема просто заключается в том, чтобы заставить login работать — что-то просто идет не так. на самом деле это довольно интересно, но я спрошу в другом месте. Я думаю, что как только я получу эту работу, ваша помощь поможет сделать это без проблем. огромное спасибо, чувак.