Управление предупреждениями пользователей - PullRequest
0 голосов
/ 03 марта 2010

Я не привык работать со значениями, которые должны уменьшаться каждый интервал времени, как для предупреждения пользователя, например, предупреждение, которое сохраняется для 30 days, которое может достичь максимального значения 3 warns до того, как пользователь будет забанен

Я подумал о том, чтобы спроектировать пользовательскую таблицу, подобную этой, но теперь я должен над ней поработать, я считаю, что это бесполезно при уменьшении значений каждые 30 дней:

table_user
- username
- email
- warnings (integer)
- last_warn (timestamp data type)

мне использовать таймер php?

существует ли какая-либо стандартная методика предупреждений пользователей?

Ответы [ 3 ]

2 голосов
/ 03 марта 2010

Вы можете создать другую таблицу

User_warnings:
    user_id
    warn_timestamp

Всякий раз, когда пользователь предупрежден , вы сначала удаляете все записи старше 30 дней, а затем проверяете, существуют ли еще два или более предупреждений. Тогда забаньте пользователя.

Если вам нужна история обо всех предупреждениях, не удаляйте старые предупреждения, а просто запрашивайте предупреждения за последние 30 дней.

Таким образом, вам не нужно уменьшать каждый день, а просто проверять, появляется ли другое предупреждение.

1 голос
/ 03 марта 2010

Я полагаю, что на самом деле не существует стандартного дизайна для систем предупреждения пользователей. «Три удара - и ты вне игры» - это типичный подход, но не всегда лучший. Например, если на моем веб-сайте есть правила N, и мы скажем, что K из этих правил являются серьезными нарушениями, то нарушения, которые не являются настолько серьезными, я бы сказал, нанесли три удара. Но, может быть, серьезные преступления - автобан или нанесение двух ударов?

Если бы мне пришлось настроить что-то вроде этого, я бы создал таблицу, которая выглядела бы так:

user_warnings:
- warning_id
- user_id
- created_at
- offense_level

И затем, возможно, будет настроен запрос, в котором вы сможете найти любых пользователей, у которых уровень нарушений в сумме за последние T дней был больше или равен значению уровня запрещенных нарушений. И если их общий уровень оскорблений превысил рекомендованное значение, забаньте пользователя. Я бы сказал, установите уровень нарушений примерно на 5, и у вас будет многоуровневый уровень нарушений.

Никогда не удаляйте прошлые преступления, хотя, по моему мнению. Вы никогда не знаете, когда важно помнить вещи, которые произошли ранее, и хорошо вести записи об этом. Просто убедитесь, что этот запрос проверяет только те даты, которые имеют возраст менее 30 дней (или столько дней, сколько могут быть установлены предупреждения, которые вы хотите установить).

1 голос
/ 03 марта 2010

Нормализуйте свои таблицы, выводя предупреждения от пользователя, например:

Table: Users
UserID  int auto generate PK
UserName
UserEmail

Table: UserWarnings
UserID
WarningDate

теперь вы можете написать запрос, чтобы определить, есть ли три предупреждения за последние 30 дней. Запустите этот запрос, когда произойдет «предупреждение», и если будет возвращена строка, забаньте пользователя.

Запрос будет выглядеть примерно так:

SELECT
    COUNT(*)
    FROM UserWarnings
    WHERE UserID=...your user id... AND WarningDate>=...current date time...
    HAVING COUNT(*)>2

Создав таблицу предупреждений, вы можете сохранить полную историю предупреждений, что может быть полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...