Вопрос обобщен, но я хочу спросить о конкретном случае, который хочу решить.
Я работаю с действительно вонючей базой кода приложения электронной коммерции и хочу ее реорганизовать. Я думал, что я должен начать с аутентификации пользователя.
Проблема
Перед каждым действием в любом контроллере мы проверяем, принадлежит ли пользователь определенному типу: Guest
, Signed-In
или Admin
, а также разрешен ли пользователю доступ к этому действию в зависимости от типа. Если все условия соблюдены, то действие выполняется. И это происходит в большинстве действий большинства контроллеров.
Мое мышление
Я знаю, что этот код вонючий, потому что проверка, относится ли пользователь к определенному типу и имеет ли он доступ к действию, не является обязанностью действия.
Мое решение, которое может или не может быть возможно
Мы можем сделать SessionsController
(или другое имя) и позволить ему обрабатывать часть аутентификации и авторизации. Но я хочу, чтобы SessionsController
выполнял свою работу автоматически перед каждым запросом. Т.е. Каждый запрос должен проходить через SessionsController
, и тогда этот контроллер решит, переслать ли запрос соответствующему контроллеру.
Я ищу в Google это, но ничего не нашел. Поэтому мой логический вывод заключается в том, что передача запроса через серию контроллеров может оказаться невозможной. Но я не уверен. Так что, если это возможно, наставьте меня, как это сделать. А если это невозможно, то предложите другой способ сделать это.