В общем я наврал, есть возможность сделать это стандартными средствами (не проснулся пока писал первое сообщение).
В Laravel все драйверы сессий реализуют
SessionHandlerInterface.
Получить хэндлер можно с помощью:
session()->getHandler();
Получить ID текущей сессии можно с помощью:
session()->getID();
Таким образом нам нужно сделать следующее:
- Когда пользователь входит в систему, получить ID его сессии и сохранить его в БД (например добавить в таблицу users поле sesison_id).
- Когда админу нужно разлогинить пользователя, нужно просто вызвать:
$user = // получаем юзера;
session()->getHandler()->destroy($user->session_id);
Метод
destroy удалит сессию пользователя, и его выкинет из системы.
Не проверял, но должно работать.
Можно сделать иначе. Когда нужно выкинуть юзера из системы, можно записывать в сессию параметр (например should_logout = true).
Добавить middleware, который при каждом запросе будет проверять есть ли в сессии этот параметр, и если есть, то удалять сессию.
Второй вариант более универсальный, так как позволяет сделать какие-то действия перед тем как юзера выкинет из системы (например сохранить часть данных из сессии в БД, если это необходимо).