Cakephp: вход администратора как пользователь onClick

я ищу способ, как я (вошедший в систему как администратор) может войти в систему как определенный пользователь (которого я выбираю из списка пользователей, список уже присутствует) по щелчку, не зная его пароля?

У всех пользователей разные пароли, поэтому одинаковые пароли не подходят.

Хорошо, вопрос закрыт. Вот решение:

P.S. группа с идентификатором 2 - это моя группа администраторов.

function loginasuser($user_id = null) {

    if (!$user_id) {
        $this->Session->setFlash(__('Invalid User.', true));
        $this->redirect(array('action'=>'index'));
    }
    $data = $this->Auth->user();

    if($data['User']['group_id'] == 2 || $_SESSION['Auth']['Admin']['id']==$user_id) {

    $user_data = $this->User->find('first', array('conditions' => array('User.id' => $user_id)));

    if ($user_data['User']['group_id']==2 && $user_data['User']['id']<>$_SESSION['Auth']['Admin']['id']) {
        $this->Session->setFlash(__('You can only log in as user', true));
        $this->redirect($this->Auth->redirect('/users'));
    }

        $_SESSION['Auth']['User']['id']=$user_data['User']['id'];
    $_SESSION['Auth']['User']['username']=$user_data['User']['username'];
    $_SESSION['Auth']['User']['group_id']=$user_data['User']['group_id'];
    $_SESSION['Auth']['User']['client_id']=$user_data['User']['client_id'];
    $_SESSION['Auth']['User']['created']=$user_data['User']['created'];
    $_SESSION['Auth']['User']['modified']=$user_data['User']['modified'];
    $_SESSION['Auth']['Admin']['id']=$data['User']['id'];

        if($_SESSION['Auth']['User']['group_id']==2) {
            $this->redirect($this->Auth->redirect('/ADMINHOME'));
        }
        else {
            $this->redirect($this->Auth->redirect('/USERSHOME'));
        }
    }
    else {
    $this->Session->setFlash(__('Only admins are alowed to do so!', true));
    $this->redirect(array('action'=>'index'));
    }

}

И чтобы вернуться в качестве администратора, вы можете сделать:

<? if($_SESSION['Auth']['Admin']['id']>0) { ?>
<a href="/loginasuser/<?=$_SESSION['Auth']['Admin']['id'];?>">Go Back as Admin</a><? }

person Timur    schedule 27.06.2011    source источник


Ответы (1)


Вы можете использовать «имя пользователя» (идентификатор электронной почты) для создания сеанса.

В Onclick инициируйте вызов Ajax, передайте имя пользователя и установите сеанс, используя это имя пользователя. (Просто инициируйте этот вызов, когда администратор изменит поле выбора, onChange(this.value))

Затем просто перенаправьте пользователя на домашнюю страницу конечного пользователя. Поместите ссылку, чтобы вернуться в панель администратора. Это помогает администратору войти в систему как другой пользователь.

(Используйте разные пространства имен сеансов для администратора и конечного пользователя)

$_SESSION['user'] для конечного пользователя и $_SESSIION['admin'] для администратора.

person Sahal    schedule 27.06.2011
comment
спасибо, это указало мне правильное направление. Я опубликую свою полную функцию на случай, если она кому-то понадобится. - person Timur; 27.06.2011