Ведение журнала IP-адресов для множества моделей в существующем приложении - PullRequest
3 голосов
/ 26 января 2009

У меня есть приложение, в котором есть множество моделей. Я хотел бы зарегистрировать IP-адрес пользователя, который их создал, с основной целью - помочь отсеять спамеров или других оскорбительных пользователей (если я не знаю, какой IP-адрес (а) они используют, я могу не блокируйте это). Мне нужно было бы отслеживать их с течением времени, так как пользователи могут получить доступ из дома, офиса, своего телефона и т. Д., И я хотел бы видеть схемы использования. Также было бы забавно отследить, куда заходят пользователи или что-то в этом роде, но в настоящее время любые побочные эффекты являются чисто продуманными.

Мы используем метод хранения пользовательских сеансов на основе файлов cookie.

Я могу придумать два способа сделать это (я создам их как ответы, чтобы люди могли голосовать):

  1. Добавить атрибут IP-адреса для каждой модели и передать его в
  2. Некоторая модель Logger, которая вызывается с помощью наблюдателя или обратного вызова after_save

Мысли? Есть ли лучшие способы? Плагины, которые делают это? Спасибо !!

Ответы [ 3 ]

2 голосов
/ 26 января 2009

Некоторая модель Logger, которая вызывается с помощью наблюдателя или обратного вызова after_save

Плюсы:

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

Минусы:

  • Как, черт возьми, я могу получить IP-адрес без изменения каждого Model.create для его передачи? Я должен был бы сломать теорию MVC, что я готов сделать, но я действительно не знаю, как
2 голосов
/ 26 января 2009

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

1 голос
/ 26 января 2009

Добавить атрибут IP-адреса для каждой модели и передать его в

Плюсы:

  • Концептуально просто. Есть атрибут, и я легко вижу, что публикация 123 была загружена пользователем 222 с IP 123.123.123.123

Минусы:

  • Требует, чтобы я коснулся / перекодировал каждую модель и каждый Model.create (в нем используется идиома rails из Model.create params [: model], так что я просто добавлю запрос на адрес) Это много работы. Многие тесты должны быть переписаны
  • Если я когда-нибудь перейду на IPv6, это не получится (если модели ожидают добавления IPv4)
...