Cakephp:管理员以用户身份登录onClick

时间:2011-06-27 10:11:51

标签: cakephp

我正在寻找一种方式,我(以管理员身份登录)如何以特定用户身份登录(我从用户列表中选择,列表已经存在)onclick,而不知道它的密码?

所有用户都有不同的密码,因此不能选择相同的密码。

好的,问题已关闭。这是解决方案:

P.S。 ID为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 个答案:

答案 0 :(得分:1)

您可以使用“用户名”(电子邮件ID)创建会话。

On Onclick,触发Ajax调用,传递用户名并使用该用户名设置会话。 (当管理员更改选择框onChange(this.value)

时,只需触发此通话

然后只需将用户重定向到最终用户主页。点击链接返回管理信息中心。这有助于管理员以其他用户身份登录。

(为admin和最终用户使用不同的会话命名空间)

$ _ SESSION ['user']表示最终用户,$ _SESSIION ['admin']表示管理员用户。