Вопрос по cakephp, admin, cakephp-2.0 – cakephp auth-> loginRedirect для администратора

0

Я довольно новичок в cakePHP и прочитал все учебники на сайте. Я создаю небольшое примерное приложение, используя торт 2.1, и столкнулся с проблемой. По сути, я хочу, чтобы пользователи с правами администратора перенаправлялись на страницу входа, отличную от той, на которую перенаправляется обычный пользователь. Я уверен, что есть простой способ сделать это, но я изо всех сил!

У меня включена маршрутизация администратора и я использую компонент auth (и компонент ACL, хотя это не влияет на мою проблему). У меня есть 2 логина один для admin - admin_login () и логин для обычных пользователей - login () - нормальный логин без прав администратора работает нормально.

В моем AppController.php у меня есть это:

class AppController extends Controller {

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        )
    ),
    'Session'
);
public $helpers = array('Html', 'Form', 'Session');

public function beforeFilter() {
    //Configure AuthComponent
    $this->Auth->allow('display'); // Allows access to the homepage of the app
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
    $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
    $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add');
}

}

Итак, как вы можете видеть, по умолчанию пользователи перенаправляются при входе в функцию add () контроллеров сообщений, которая работает нормально. Однако, как я могу установить другое перенаправление входа в систему для моей функции admin_login ()?

Я прочитал несколько постов здесь, но большинство из них касаются более старых версий торта, а не торта 2.

Если это поможет, это моя функция admin_login в UsersController.php

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('logout');
}

public function admin_login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            if ($this->Session->read('Auth.User')) {
                $this->Session->setFlash('You are logged in!');
                //$this->redirect($this->Auth->redirect());

                // This doesnt work! Grrrrrr
                //$this->redirect(array('controller'=>'pages', 'action'=>'admin_index'));

                // This nearly works...
                if($this->Auth->user())$this->redirect(array('controller' => 'pages', 'action' => 'admin_index'));
            }            
        }
        else {
            $this->Session->setFlash('Your username or password was incorrect.');
        }
    }

Кто-нибудь может указать мне правильное направление?

Ваш Ответ

2   ответа
0

Может быть, это работает:

if($this->request->params['admin']) {
    $this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'index', 'admin' => true);
}
else {
    $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add');
}

Замените настройку loginRedirect в beforeFilter () этими строками

Спасибо, я попробовал ваше предложение, однако, когда я вхожу в систему как администратор, он просто оставляет меня на странице входа. У меня есть это в функции admin_login (): public function admin_login () {if ($ this- & gt; request- & gt; is ("post")) {if ($ this- & gt; Auth- & gt; login () ) {if ($ this- & gt; Session- & gt; read ("Auth.User")) {$ this- & gt; Session- & gt; setFlash (& gt; Вы вошли в систему! & ap;;); $ Этом- & GT; перенаправление ($ этом- & GT; Auth- & GT; перенаправление ()); James J
2

Если у вас есть роль - & gt; & quot; администратор, пользователь & quot; в вашей базе данных поместите в свой AppController - beforeFilter ():

if($this->Auth->user('role') == 'admin'){
     $this->Auth->loginRedirect = array('controller' => 'controller1', 'action' => 'action1');
}else{
     $this->Auth->loginRedirect = array('controller' => 'controller2', 'action' => 'action2');
}

Если вы хотите узнать, что находится в вашем $ this-> gt; Auth-> gt; user (), просто введите:

debug($this->Auth->user());
Спасибо, у меня есть что-то похожее (user_group), поэтому я использовал это - как бы я это ни делал в функции входа в систему администратора, было бы лучше сделать это в beforeFilter, как вы предлагаете? Должен ли он идти в AppController перед фильтром или UsersController перед фильтром? - Спасибо за вашу помощь James J
Это решение неверно, $ this-> Auth-> пользователь не установлен в точке, где вызывается beforefilter, и поэтому в случае вышеприведенного примера часть if никогда не будет истинной, и поэтому часть else всегда будет & apos ; истинно & APOS ;. Приведенный выше код должен быть в «логине» метод в UsersController
Если вы этого не сделали, вы можете добавить меня в MSN, Skype или Facebook, и я посмотрю ваш код. :)
Поместите его в AppController beforeFilter () и в UsersController beforeFilter ():public function beforeFilter(){ parent::beforeFilter(); //other code }
Хорошо, я следовал твоим инструкциям без удачи. Он не перенаправляет, он просто оставляет вас на странице входа в систему, но отображает логин флеш-сообщения. К сожалению, у меня нет доступа к IM или FB на работе :( Я начинаю понимать, что проблемы связаны с маршрутизацией администратора. Как только я вошел в систему, если я вручную настроился на / admin /, он перенаправил меня к auth- & gt; loginRedirect в вашем коде ... James J

Похожие вопросы