Нет. Альтернатива - проверять состояние при каждом обновлении любой страницы, где используется авторизация, где вы хотите ограничить доступ забаненному. Это поле?
вообще поле для формы заполнения, где заполняется бан, выбираем время, пишем причину бана, и возможно поле должно быть type где описан массив запретов на ту или иную страницу,.
Зачем там хранить массив. Храните его идентификатор: 0 - предупреждение, 1 - ограничение, 2 - бан и тд
вопрос: когда установил пользователю бан, и пытаюсь поставить ему снова бан, стоит ли проверить а не стоит у него бан, или сделать обновления записи если обнаружено что стоит бан, при проверке, как делаете вы?)
Ну, так вы ему почистите биографию. Вы установили временной промежуток, указали причину и тип. Сохраните для истории.
не понял какую историю ему почистить? Вот например бан поставил на запрет писать сообщения под постом (это как пример), ему нужно чистить биографию?
Обновив запись об ограничении, вы сотрете историю нарушений пользователем каких-то правил. Нужно не обновлять существующую, а добавлять новую.
стоит ли давать возможность ставить бан не подтвердившему пользователю, который не активировал аккаунт? --- Добавлено --- а со старой что делать тогда? Хранить как история, не вопрос такой должен был, быть: если у пользователя стоит бан и он не окончен, а кто-то захотел и поставил ему еще бан, время должно приплюсоватся или уже будет действовать новый бан?
Нет. За это должны отвечать "роли" Оставить. Использовать для анализа поведения конкретно этого пользователя на сайте. Это как анамнез.
хорошо, как проверить пользователя при входе, по какому полю проверять что у него есть бан, если записей бана несколько, просто бан может быть уже истек, а при проверке мы например по полю uid проверяли, существует ли в базе ( я думаю этого будет мало ). Можно конкретику спасибо.
дружище, есть таблица users_banned в ней есть uid пользователя, т.е его идентификатор, по которому я в принципе мог бы сделать проверку что у него стоит бан, а как же это сделать, если пользователь только авторизуется и в сессии нет его uid ?
например join) объединять таблицы запросы из двух таблиц сравнивать, знаю left join, left join iner join но в них путаюсь по каким принципам база с ними играется.
хорошо, запрос сделал не помню уместно писать еще условие WHERE вроде как да: PHP: $sql = $this -> db -> sel('SELECT `t1`.`user_password`, `t2`.`type_ban`, `t2`.`start_ban`, `t2`.`end_ban` FROM `users` `t1` LEFT JOIN `users_banned` `t2` ON (`t1`.`uid` = `t2`.`uid`) WHERE `t1`.`user_login` = ?', [ $l ], false ); что по поводу сравнения даты как она делается, нужно сравнивать текущую дату с датой окончания?
ага спасибо, попробую, для текущей даты можно воспользоваться функцией data()? Нужно ли использовать узнавать временную зону пользователя date_default_timezone_set('UTC') чтобы делать проверку даты?