Cakephp: Admin Войти как пользователь onClick - PullRequest
2 голосов
/ 27 июня 2011

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

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

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

Группа PS с идентификатором 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><? }

1 Ответ

1 голос
/ 27 июня 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...