проверка авторизации администратора не работает

#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. какой учебник вы использовали? можете ли вы опубликовать ссылку?

2. jamesfairhurst.co.uk/posts/view/…

Ответ №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 работать — что-то просто идет не так. на самом деле это довольно интересно, но я спрошу в другом месте. Я думаю, что как только я получу эту работу, ваша помощь поможет сделать это без проблем. огромное спасибо, чувак.