Сделай чуть по другому тогда, принцип логики в том, чтобы выкинуть пользователя, который ходит по экшенам.Drugpunker писал(а): ↑2020.09.09, 15:10Блин, можешь пояснить.unknownby писал(а): ↑2020.09.08, 08:43 Если авторизированный может делать еще что-то, а неавторизированный только читать, то делаем блокировку внутри записи пользователя (плюс прописываем для истории в отдельную таблицу users_id, причину блокировки и даты блокировки). При проставлении бана, чтоб разлогинить человека можно как вариант сделать такТ.е. не важно где пользователь будет находиться, если он залогинен и он оказался в бане, то выкинет сразу. Без удалений сессии.Код: Выделить всё
'on beforeAction' => function ($event) { if(!empty(\Yii::$app->user->identity)){ //проверка на бан //если в бане, то Url::toRoute('/user/auth/logout') } },
При логине проверять на активированность учетной записи (да/нет) и выдавать соответствующую информацию пользователю, ну и в бане (да/нет), также выдавать информацию пользователю.
Можно конечно и по другому как-то, наверное Подскажут другие люди, которые такое делали в своей системе.
Чёт не могу я понять как сопоставить identity и конкретного юзера.
Это ж через куки, только для текущего.
То есть админ будет логаутить себя.
Админ будет ходить и у него срабатывают под него своя проверка, а у забаненного после последующего перехода на страницу, разлогинет и можно заодно передать текст во флэш оповещениях, что он был забанен или отправить на страницу с текстом бана и почему, тут как душе угодно.
Код: Выделить всё
'on beforeAction' => function ($event) {
if(!\Yii::$app->user->isGuest)){
//Прошла проверка на то, что пользователь залогинен
//проверка на бан
if(User::findOne(\Yii::$app->user->id)->users_banned){
Url::toRoute('/user/auth/logout');
}
//поле в БД users_banned буленовское 1 или 0
//если в бане, то Url::toRoute('/user/auth/logout')
}
},