Страницы MVC, требующие входа пользователя в систему - PullRequest
2 голосов
/ 01 апреля 2010

Я работаю над небольшой платформой MVC, и мне интересно, каков «лучший способ» структурировать вещи, чтобы защищенные страницы / контроллеры всегда обеспечивали вход пользователя (и, таким образом, автоматически перенаправляли на страницу входа-- или в другом месте - если нет). Очевидно, есть много способов сделать это, но мне интересно, какие решения являются наиболее распространенными или считаются наилучшей практикой. Некоторые идеи у меня были:

  • Явно вызвать user->isLoggedIn() в начале вашего метода действия контроллера? (Кажется, слишком легко забыть и оставить важную страницу незащищенной при аварии)
  • Заставить ваш контроллер расширять secureController, который всегда проверяет вход в конструктор?
  • Проверяется ли в модели, когда запрашивается защищенная информация? (Похоже, излишние звонки будут сделаны)
  • Что-то еще целиком?

Примечание: я работаю в PHP, хотя вопрос не зависит от языка.

Ответы [ 2 ]

5 голосов
/ 01 апреля 2010

ASP.Net MVC делает это красиво с атрибутом [Authorize] класса контроллера, который требует авторизации

1 голос
/ 01 апреля 2010

Это не единственный способ сделать это, но ...

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

Это шаблон проектирования J2EE, но вы можете реализовать его на любом языке, как только получите идею. В этом случае один из «фильтров» является «фильтром аутентификации». См. http://java.sun.com/blueprints/corej2eepatterns/Patterns/InterceptingFilter.html для деталей идеи (на Java).

Преимущество этого состоит в том, что все страницы будут централизовать свою логику в FilterManager, поэтому страница должна иметь только свой вызов FilterManager. Кроме того, вы можете добавить отладочные фильтры / фильтры журналов / и т. Д., Которые могут помочь в поддержке / разработке вашего кода.

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