Я живу в Германии и наданный момент прохожу практику на фирме, основная специализация которой –Magento. Я уже 1,5 месяца на фирме и уже написал свой первый тренировочный модуль, ознакомился со структурой модулей, основными возможностями, такими, как, например, метод Event-Observer, Rewrites, Cronjobs и др.
2 дня назад я получил первое задание, связанное с реальным клиентом, а именно разработка нестандартного модуля „Login Attempts Limiter“. Вот постановка проблемы:
„Необходимо разработать модуль, который сохраняет неудачные попытки (неверный пароль) логина клиентов и администраторов и блокирует доступ при достижении кол-ва неудачных попыток значения, конфигурируемого в админке.
Задачи:
Логин админа
- Проверка повторных попыток
- Сохранение попыток
- Сброс попыток при удачном логине
- Блокировка пользователя при достижении максимального значения
- Отображение ошибки (при блокировке)
- Проверка повторных попыток
- Сохранение попыток
- Сброс попыток при удачном логине
- Блокировка пользователя при достижении максимального значения
- (необходимо учитывать, что логин может происходить в процессе Checkout)
- Отображение ошибки (при блокировке)
- Опция активировано: да / нет
- Конфигурироемое максимальное значение попыток
- E-mail при блокировке на указываемый адрес
- Выбор групп клиентов / админов, для которых активен данный модуль
(например, чтобы не блокировать суперадминистраторов)
- Grid с заблокированными клиентами с возможностью разблокировки
- Grid с заблокированными админами с возможностью разблокировки
На данном этапе мне необходимо разработать концепцию, КАК я собираюсь выполнить поставленную передо мной задачу и затем обсудить мои идеи с шефом. Сейчас я напишу о своих идеях. Моя просьба к форумчанам дать оценку моему подходу и, если Вы найдете что-то не совсем правильным или эффективным, указать на это и предложить лучшие методы решения поствленной задачи.
Стараясь избежать rewrite, недостатки которого всем известны, я пытался найти подходящие события в Magento, которые должны были бы звучать примерно так: „клиент ввел неправильный пароль“, „админ ввел неправильный пароль“, однако таких событий в Magento, к сожалению, нет. Затем я проверил, какие события происходят при неправильном вводе пароля существующим клиентом (записал их в лог) и админом. В случае клиента я нашел событие, которое „выстреливает“ один раз и очень мне подходит - „controller_action_predispatch_customer_account_loginPost“, которое происходит всякий раз перед вызовом Mage_Customer_AccountController::loginPostAction(), которая собственно и отвечает за логин клиента.Поэтому я хочу реагировать на это событиев своем наблюдателе.
С админом все выглядит немного сложнее, я здесь тоже изучил события, но подходящего не нашел. Скажу ,к примеру, что событие „admin_session_user_login_failed“ выстреливает при различного рода исключениях, то есть не только при вводе неправильного пароля. Поэтому в данном случае, на мой взгляд, избежать rewrite не получится – придется переписать класс
Mage_Admin_Model_User, в котором происходит аутентификация, и либо сгенерировать собственное событие при неправильном вводе пароля и реагировать на него, либо использовать, к примеру, сервисы, без Event-Observer подхода.
Пока все, не буду раздувать сообщение. Заранее рад и благодарен за Ваши ответы.