Как разлогинить пользователя?
Как разлогинить пользователя?
У админа есть таблица с пользователями и надо приделать кнопку отключения. Ну понятно что status сменить с 1 на 0, но как выбросить из сессии уже залогиненого пользователя? Опрашивать постоянно базу на предмет активности профиля как то накладно. Подскажите как админу послать команду на выход другому профилю?
Re: Как разлогинить пользователя?
а с какой целью? если оградить от какие-то действий, то лучше уж роль менять.
Re: Как разлогинить пользователя?
Человек уволился к примеру, надо задисаблить его учётку конкретно. Роль сохраняется в сессии и при работе в зависимости от сессии пускает куда надо. Надо каким то образом дать команду на разлогон или удалить сессию.
Может есть какая глобальная переменная у yii в которой сохранять атрибут для отключенных, а они при работе будут проверять не пора ли разлогиниться и подтирать эту переменную?
Может есть какая глобальная переменная у yii в которой сохранять атрибут для отключенных, а они при работе будут проверять не пора ли разлогиниться и подтирать эту переменную?
Re: Как разлогинить пользователя?
Я считаю, что нужно использовать RBAC и для уволенного менять роль.
Re: Как разлогинить пользователя?
Придётся переписывать много кода под RBAC. Но если он при каждом обращении к сайту дёргает базу с ролями то это не выход. Проверять роль в базе или статус подключения я и сам могу дописыванием одной строки кода. Не хотелось бы вообще к базе обращаться что бы выяснить роль
Re: Как разлогинить пользователя?
Так можно ведь кешировать.
Re: Как разлогинить пользователя?
Я люблю частенько чистить кэш. Хранить там не вариант )
ПС. Мысль понял. Я сначала хотел в кэше хранить переменную, но понял что надо хранить запрос к базе и это выход. Спасибо за наводку
ПС. Мысль понял. Я сначала хотел в кэше хранить переменную, но понял что надо хранить запрос к базе и это выход. Спасибо за наводку
Re: Как разлогинить пользователя?
как часто тут любят пустословить. Вместо ответа на вопрос чушь начал писать.anton44eg писал(а):Так можно ведь кешировать.
Вопрос конкретный. Если ответа не знаешь, нафига эфир засирать бредовыми какашками.
--
Re: Как разлогинить пользователя?
А это ещё что за бред?kutsanov писал(а):как часто тут любят пустословить. Вместо ответа на вопрос чушь начал писать.
Вопрос конкретный. Если ответа не знаешь, нафига эфир засирать бредовыми какашками.
Re: Как разлогинить пользователя?
да реально бесят такие "умники".ElisDN писал(а):А это ещё что за бред?kutsanov писал(а):как часто тут любят пустословить. Вместо ответа на вопрос чушь начал писать.
Вопрос конкретный. Если ответа не знаешь, нафига эфир засирать бредовыми какашками.
Человеку помощь нужна, а он демагогию разводит.
Причем бредовую идею предлагает.
Так что это адекватная реакция на чушь!
Re: Как разлогинить пользователя?
Код: Выделить всё
session_id($session_id);
session_start();
session_destroy();
session_commit();
Re: Как разлогинить пользователя?
А чем Вам не понравилось встроенное в DBManager кеширование запросов к RBAC-таблицам?kutsanov писал(а):да реально бесят такие "умники".
Человеку помощь нужна, а он демагогию разводит.
Причем бредовую идею предлагает.
Так что это адекватная реакция на чушь!
Re: Как разлогинить пользователя?
Изначальный вопрос почитай!ElisDN писал(а):А чем Вам не понравилось встроенное в DBManager кеширование запросов к RBAC-таблицам?kutsanov писал(а):да реально бесят такие "умники".
Человеку помощь нужна, а он демагогию разводит.
Причем бредовую идею предлагает.
Так что это адекватная реакция на чушь!
Re: Как разлогинить пользователя?
Можно также развести демагогию, о том как правильнее использовать роль или убить сессию, и я кучу причин найду в пользу второго, в данном случае. Но вопрос даже не в этом. не раз уже тут встречаются чудаки (на букву М), которые вместо помощи ублажают свое ЭГО, когда сами из себя мало что представляют. Вот и ставлю на место, потому как задолбали своим спамом.ElisDN писал(а):А чем Вам не понравилось встроенное в DBManager кеширование запросов к RBAC-таблицам?kutsanov писал(а):да реально бесят такие "умники".
Человеку помощь нужна, а он демагогию разводит.
Причем бредовую идею предлагает.
Так что это адекватная реакция на чушь!
еще раз, ответ на вопрос, а то уже из-за чудаков и их защитников, суть беседы потерялась.
Стобы принудительно разлогинеть пользователя, я бы сделал так:
Код: Выделить всё
session_id($session_id);
session_start();
session_destroy();
session_commit();
соответственно ID нужно прописывать где-то
я у себя веду простую табличку с полями типа USER_ID, SESSION_ID
и если так будете делать, не забудьте что записей может быть несколько (с разных устройств как вариант).
И еще, вся эта фигня работает, если отключить автологирование (иначе Yii создает сессию принудительно), вроде как. Но это не точно, проверяйте!:)
Re: Как разлогинить пользователя?
Уууу... накостылили фигни. А я угадаю эту мелодию с пяти нот:kutsanov писал(а):и если так будете делать, не забудьте что записей может быть несколько (с разных устройств как вариант).
И еще, вся эта фигня работает, если отключить автологирование (иначе Yii создает сессию принудительно), вроде как. Но это не точно, проверяйте!:)
Код: Выделить всё
public static function findIdentity($id)
{
return self::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
}
Re: Как разлогинить пользователя?
согласен! Ваше смотрится красивее! Но давайте к практике.ElisDN писал(а):Уууу... накостылили фигни. А я угадаю эту мелодию с пяти нот:kutsanov писал(а):и если так будете делать, не забудьте что записей может быть несколько (с разных устройств как вариант).
И еще, вся эта фигня работает, если отключить автологирование (иначе Yii создает сессию принудительно), вроде как. Но это не точно, проверяйте!:)
И всё.Код: Выделить всё
public static function findIdentity($id) { return self::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]); }
Я исхожу, что Статус - определяет удален пользователь или нет.
Авторизация через корпоративную почту, которая выдается админами, например manager1@firm.ru, manager2@firm.ru, manager3@firm.ru ...
Ситуация уволили сотрудника - manager1@firm.ru. На его место пришел другой. Нужно чтобы новый имел доступ ко всему что имел прежний (включая историю). Чтобы старый не зашел меняем пароль. Но если не разлогинеть принудительно старого, сам он не разогнется.
Но в целом Ваш подход правильный, если не смотреть на вопрос темы!:)
Re: Как разлогинить пользователя?
или еще вариант
пришли из органов, сгребли некоторый компы, на которых автоматом были присочинены сотрудники.
Чтобы не зашли "чужие", нужно принудительно выкинуть юзеров.
Хотя в данном случае лучше тупо чистить вся папку с сессиями, а может и сервера:):):)
вообщем все то не в тему
думаю вопрос закрыт
пришли из органов, сгребли некоторый компы, на которых автоматом были присочинены сотрудники.
Чтобы не зашли "чужие", нужно принудительно выкинуть юзеров.
Хотя в данном случае лучше тупо чистить вся папку с сессиями, а может и сервера:):):)
вообщем все то не в тему
думаю вопрос закрыт
Re: Как разлогинить пользователя?
Ну тогда включаем хранение сессий в базе, в таблицу добавляем поле user_id и, собственно, туда вписываем текущего пользователя:kutsanov писал(а):Ситуация уволили сотрудника... На его место пришел другой. Нужно чтобы новый имел доступ ко всему что имел прежний (включая историю). Чтобы старый не зашел меняем пароль. Но если не разлогинеть принудительно старого, сам он не разогнется.
Код: Выделить всё
'session' => [
'class' => 'yii\web\DbSession',
'writeCallback' => function () {
return ['user_id' => Yii::app()->user->id],
},
],
Код: Выделить всё
Yii::$app->db->createCommand()
->delete(Yii::$app->session->sessionTable, ['user_id' => $id])
->execute();
Теперь точно всё
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Как разлогинить пользователя?
Забавно, но только недавно сделал issue с планом написать рецепт для кукбука: https://github.com/samdark/yii2-cookbook/issues/92. Ещё забавнее, что SilverFire чуть ранее ответил на этот же вопрос на StackOverflow.
Нравится Yii? Давайте сделаем его лучше!.
Re: Как разлогинить пользователя?
Да, забавно. И на вебинаре мы упоминали про https://github.com/yiisoft/yii2/issues/9718.