Смена пользователя в 1 клик

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Закрыто
myselfdsk
Сообщения: 24
Зарегистрирован: 2012.06.25, 13:30

Смена пользователя в 1 клик

Сообщение myselfdsk »

Доброго времени суток.
Такая проблема :
Есть список пользователей, например Users
Надо в списке напротив каждого юзера сделать иконку, при клике на которую мы выходим из своей учетки и входим в его.
Вопрос в том, как можно передать при клике логин юзера и его пароль, залогиниться и войти в систему ?
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: Смена пользователя в 1 клик

Сообщение nizsheanez »

а тупо гет параметрами не подойдет?
/loginAsUser/login/alex/
ну и проверку в контроллер loginAsUser воткнуть на то что вы из под админа заходите и еще нагенерить уникальную куку по которой будет доступ из одной учетки в другую скакать.
myselfdsk
Сообщения: 24
Зарегистрирован: 2012.06.25, 13:30

Re: Смена пользователя в 1 клик

Сообщение myselfdsk »

т.е. по ссылке я передаю из ссылки гетом логин и пас, в контроллере loginAsUser я проверяю права + кука, но есть у нас еще loginForm, как же там мне автоматически заполнить поля и "войти" ?
(я новичок в этом деле:))
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

Re: Смена пользователя в 1 клик

Сообщение RusAlex »

по ссылке логин пасс не секурно. если конечно не https
myselfdsk
Сообщения: 24
Зарегистрирован: 2012.06.25, 13:30

Re: Смена пользователя в 1 клик

Сообщение myselfdsk »

RusAlex писал(а):по ссылке логин пасс не секурно. если конечно не https
Все секурно, все одобрено
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: Смена пользователя в 1 клик

Сообщение kosenka »

myselfdsk писал(а):т.е. по ссылке я передаю из ссылки гетом логин и пас, в контроллере loginAsUser я проверяю права + кука, но есть у нас еще loginForm, как же там мне автоматически заполнить поля и "войти" ?
(я новичок в этом деле:))
В твоем случае надо забыть про LoginForm.
Я бы сделал так:

Код: Выделить всё

public function loginAsUser()
{
  //1) проверка, а может ли текущий ющер логиниться по чужим логином
  Yii::app()->user->logout();//разлогиниваем текущего юзера
  $identity=new UserIdentity(LOGIN,PASS);// где LOGIN,PASS это от того юзера под которым хотим логиниться
  $identity->authenticate();
            switch($identity->errorCode)
            {
                case User::ERROR_NONE://ошибок нет
                    $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
                    Yii::app()->user->login($identity,$duration);//логинимся под юзером
                    break;
            }  
}
 
Как-то так, примерно.
myselfdsk
Сообщения: 24
Зарегистрирован: 2012.06.25, 13:30

Re: Смена пользователя в 1 клик

Сообщение myselfdsk »

kosenka писал(а): В твоем случае надо забыть про LoginForm.
Я бы сделал так:

Код: Выделить всё

  $identity=new UserIdentity(LOGIN,PASS);// где LOGIN,PASS это от того юзера под которым хотим логиниться
а сама передача данных (логин, пасс) в таком случае в виде ссылки как осуществляется?
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: Смена пользователя в 1 клик

Сообщение kosenka »

А можно просто передавать ID юзера, под которым логинится, например, _http://site.ru/loginAsUser/?id=123&hash=QWEASDZXC
В loginAsUser проверяем по базе, а есть ли такой ID и если есть, то логинимся под ним.
Ну можно еще передать какой-нибудь "хэш с солью", чтобы точно быть уверенным, что это "мы" логинимся.
myselfdsk
Сообщения: 24
Зарегистрирован: 2012.06.25, 13:30

Re: Смена пользователя в 1 клик

Сообщение myselfdsk »

вот через аткую ссылку мне приходит id

Код: Выделить всё

                    'loginAsUser' => array(
                        'label' => 'Вход',
                        'url' => "CHtml::normalizeUrl(array('loginAsUser', 'aid'=>\$data->userid))",
                    )
а вот такая функция в контроллере :

Код: Выделить всё

    public function actionloginAsUser()
    {
        if (!Yii::app()->user->checkAccess('operator')){
            if (Yii::app()->user->isGuest) $this->redirect(array('site/login'));
            else $this->redirect(array('site/index'));
        }
        if(isset($_GET['aid']))
        {
            $aid = $_GET['aid'];
            $user = Users::model()->findByAttributes(array('userid'=>$aid));
            Yii::app()->user->logout();
            $identity=new UserIdentity($aid-> login,$aid-> passwd);
            $identity->authenticate();
                    Yii::app()->user->login($identity);
        }
    }
Проблема в том, что на стороку
$identity=new UserIdentity($aid-> login,$aid-> passwd);
он ругается
Trying to get property of non-object
Не могу разобраться в чем проблема
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: Смена пользователя в 1 клик

Сообщение nizsheanez »

$aid не объект, а null скорее всего. ищи где его получаешь и смотри почему тебе приходит null
myselfdsk
Сообщения: 24
Зарегистрирован: 2012.06.25, 13:30

Re: Смена пользователя в 1 клик

Сообщение myselfdsk »

Как я понимаю, $_GET в отличие от $_POST , передает лишь один атрибут, когда Пост осуществляет массовое присваивание.
можно ли передавая в GET лишь userid, после добавить в объект дополнительные атрибуты, такие как login и passwd? И при этом найти их в базе по userid и вписать каждое в соответсвующий атрибут?
myselfdsk
Сообщения: 24
Зарегистрирован: 2012.06.25, 13:30

Re: Смена пользователя в 1 клик

Сообщение myselfdsk »

Как можно сделать возможным логиниться не по паре(логин,пароль) а по userid ?
Аватара пользователя
Ryadnov
Сообщения: 456
Зарегистрирован: 2010.06.20, 00:38
Откуда: Санкт-Петербург

Re: Смена пользователя в 1 клик

Сообщение Ryadnov »

myselfdsk писал(а): Проблема в том, что на стороку
$identity=new UserIdentity($aid-> login,$aid-> passwd);
он ругается
Trying to get property of non-object
Не могу разобраться в чем проблема

Код: Выделить всё

$identity=new UserIdentity($user->login,$user->passwd); 
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Смена пользователя в 1 клик

Сообщение lancecoder »

Код: Выделить всё

if (!Yii::app()->user->checkAccess('operator')){
            if (Yii::app()->user->isGuest) $this->redirect(array('site/login'));
            else $this->redirect(array('site/index'));
        }
нехорошее условие
myselfdsk
Сообщения: 24
Зарегистрирован: 2012.06.25, 13:30

Re: Смена пользователя в 1 клик

Сообщение myselfdsk »

Ryadnov писал(а):

Код: Выделить всё

$identity=new UserIdentity($user->login,$user->passwd); 
Как раз это и написал, прежде чем увидел это сообщение :)
lancecoder писал(а):

Код: Выделить всё

if (!Yii::app()->user->checkAccess('operator')){
            if (Yii::app()->user->isGuest) $this->redirect(array('site/login'));
            else $this->redirect(array('site/index'));
        }
нехорошее условие
Почему? По моему все неплохо.




С сменой польователя я разобрался, но теперь другая беда :
Нужно всетаки вести лог всех изменений всех полей, таки чтобы можно было отслеживать ту личность, которая изменила определенную инфу.
Идея в том, что при вызове смены пользователя срабатывал механизм логирования, который бы записывал, кто, у кого и какую инфу поменял, чтобы не возникло никаких проблем с необоснованными обвинениями
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Смена пользователя в 1 клик

Сообщение lancecoder »

Почему? По моему все неплохо.
checkAccess трудозатратнее, лучше сразу отсеивать сначала гостей, на один запрос как никак меньше будет, если CDbAuthManager. А вообще лучше стремиться к белому списку, а остальных к черному... ;) имхо
ту личность, которая изменила определенную инфу.
запрети менять инфу, через сценарий или форму модели (unsafe attribute)
myselfdsk
Сообщения: 24
Зарегистрирован: 2012.06.25, 13:30

Re: Смена пользователя в 1 клик

Сообщение myselfdsk »

lancecoder писал(а): запрети менять инфу, через сценарий или форму модели (unsafe attribute)
В том то и соль, что возможность изменять инфу надо, как к примеру делаются на сайтах приемных комиссий, где операторы самостоятельно могут менять инфу
myselfdsk
Сообщения: 24
Зарегистрирован: 2012.06.25, 13:30

Re: Смена пользователя в 1 клик

Сообщение myselfdsk »

В общем код выглядит так :

Код: Выделить всё

    public function actionloginAsUser()
  {
        if (!Yii::app()->user->checkAccess('operatorplace')){
            if (Yii::app()->user->isGuest) $this->redirect(array('site/login'));
            else $this->redirect(array('site/index'));
        }
      if (isset($_GET['aid'])) {;
          $aid = $_GET['aid'];
          $user = Users::model()->find('userid=:userid',array(':userid'=>$aid));
          $identity = new UserIdentity($user->login, $user->passwd);
          $identity->errorCode=0;
          Yii::app()->user->login($identity);
          $this->redirect(array('site/index'));
          }
  }
Хотелось бы где-нибудь хранить значение (userid) того, кто таки зашел под вами. И использовать этот id после
Может кто подскажет чего?
myselfdsk
Сообщения: 24
Зарегистрирован: 2012.06.25, 13:30

Re: Смена пользователя в 1 клик

Сообщение myselfdsk »

Всем спасибо за помощь
Закрыто