@kedavra
code berserker

Авторизация в PHP + MVC, где осуществлять проверку?

Имеется каркас MVC-приложения. Все запросы направляются в index.php, там подключаются файл конфигурации, библиотеки, базовые классы model, view, controller и класс Router, отвечающий за маршрутизацию. Дальше запускается метод Router::start() который непосредственно разбивает URL и вызывает нужный контроллер.
Как правильно реализовать авторизацию? Делать проверку установлена ли сессия в каждом контроллере?
Как-то не изящно получается.
  • Вопрос задан
  • 2834 просмотра
Решения вопроса 1
@xskif
Идеальный вариант - создать middleware слой между контроллером и роутером. Дать возможность подгружать туда middleware классы через конфигурацию или заранее определенную папку. Создать класс который и будет проверять сессию/куки. Обычно вся логика в таких классах лежит в методе 'run'.

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

Еще можно добавить авторизацию в качестве RequestInterceptor класса, который так же подключается к контроллеру (лучше к базовому) и реагирует на прописанные события контроллера. Подписываете перехватчик на beforeAction и проводите авторизацию. Последний способ больше для RESTful приложений.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Читаем про HTTP Middelware, request-response фреймворки, не зацикливаемся на MVC. В итоге влоу выходит таким:

Предположим что у нас есть интерфейс Kernel содержащий метод handle, который на вход принимает Request и на выход выдает Response. Далее...

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

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

В любом случае аутентификацию надо делать во фронт-контроллере, а авторизацию - уже могут быть варианты.
Ответ написан
By_Engine
@By_Engine
Нужен базовый контроллер, в котором будут установлены все необходимые параметры. От этого контроллера наследуются контроллеры приложений
Ответ написан
Комментировать
Mike77
@Mike77
lamp sf2 yii разработчик
в моделе
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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