Как зарегистрировать пользовательские действия с php и mysql?

Я работаю над своим CMS, и я хочу, чтобы он зарегистрировал операции пользователями и другими администраторами. Например: когда новый пользователь регистрируется, или администратор делает новое сообщение новостей-> обновление последнее действие.

Я хочу знать то, что является лучшим и самым легким путем.

10
задан eGGzy 21 March 2010 в 18:48
поделиться

3 ответа

  • Создайте таблицу в своей базе данных, чтобы регистрировать активность пользователей.
  • Определите различные типы действий , которые могут происходить в вашем приложении.
  • Создайте общую функцию, которая регистрирует любую активность в этой таблице.
  • Вызывайте эту функцию из любого места, вы выполняете полезные для журнала действия в своем приложении.

Затем вы можете написать инструмент отчетности, который предоставит вашим администраторам доступ к этим зарегистрированным действиям, вы можете фильтровать их по пользователям, времени и типам действий.

В моем лог-фреймворке я специально помечаю действия, которые могут рассматриваться как вредоносные, и присваиваю им различные числовые значения угрозы. Если сумма значений потока пользователя достигает определенного порога, я выхожу из системы.

В идеале, если вы пишете приложение, вы пишете код инфраструктуры, например, ведение журнала, в самом начале, а затем используете его во всем коде бизнес-логики позже.

Правка для очистки:

Со временем вы можете собрать много записей в этой таблице. В зависимости от ваших требований вы можете делать разные вещи.

  • Удалите все записи старше x дней (возможно, года).

  • Удалите все записи определенных типов старше x дней, но сохраните записи других типов дольше или навсегда.

  • Перемещать записи старше определенного порога в таблицу архивного журнала. Это сохраняет вашу основную таблицу небольшой, но позволяет вам получить доступ к более старым данным журнала, если вам действительно нужно. У меня есть флажок Использовать архив на моей странице журналов обзора.

16
ответ дан 3 December 2019 в 17:58
поделиться

Основной ответ

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

Возможно, полезный пример

Я не уверен насчет PHP CMS, которые делают это, но я знаю админское приложение Django .Django реализован на Python, но портировать этот код на PHP должно быть довольно просто. Даже если код не является прямым портом, дизайн может быть перенесен.

Файл, содержащий журнал, находится в модуле admin в models.py .

Некоторые ключевые аспекты:

Модель данных для таблицы журналов:

class LogEntry(models.Model):
  action_time = models.DateTimeField(_('action time'), auto_now=True)
  user = models.ForeignKey(User)
  content_type = models.ForeignKey(ContentType, blank=True, null=True)
  object_id = models.TextField(_('object id'), blank=True, null=True)
  object_repr = models.CharField(_('object repr'), max_length=200)
  action_flag = models.PositiveSmallIntegerField(_('action flag'))
  change_message = models.TextField(_('change message'), blank=True)
  objects = LogEntryManager()

И LogEntryManager, который сохраняет фактические записи журнала:

class LogEntryManager(models.Manager):
  def log_action(self, user_id, content_type_id, object_id, object_repr, action_flag, change_message=''):
    e = self.model(None, None, user_id, content_type_id, smart_unicode(object_id), object_repr[:200], action_flag, change_message)
    e.save()

HTH, удачи!

4
ответ дан 3 December 2019 в 17:58
поделиться

Я использую две таблицы для действий: одна дает каждому действию идентификатор, а другая просто регистрирует идентификатор пользователя, идентификатор активности и временную метку. Я делаю это потому, что int занимает меньше места, чем строка, так зачем же записывать одни и те же строки снова и снова? Второй вариант на самом деле не нужен, вы так же легко сохраняете коды действий в текстовом файле для справки, но db кажется более легким местом для запоминания.

Раньше я использовал функцию для обработки фактических действий при ведении журнала, но в следующий раз, когда я сделаю это, я буду использовать шаблон Observer. Он кажется намного более гибким, и мне уже приходилось редактировать вызовы функций регистрации из старого кода, который у меня не собирался ничего регистрировать. Я предпочитаю повторно использовать код без необходимости редактирования.

2
ответ дан 3 December 2019 в 17:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: