2011-06-27 71 views
2

我正在寻找一种方式,我(以管理员身份登录)可以登录我作为特定用户(我从用户列表中选择,列表已存在)onclick不知道它的密码?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

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

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

然后只是将用户重定向到最终用户主页。放置一个链接回到管理仪表板。这有助于管理员可以作为其他用户登录。

$ _SESSION [ '用户']为最终用户和$ _SESSIION [ '管理员']为管理员用户(使用不同的会话管理和最终用户的命名空间)。

+0

谢谢,这指出我正确的方向。如果有人需要,我会发布完整的功能。 – Timur