Есть некоторый проект, пишется на чистом PHP без использования фрэймворков.
Не авторизованный пользователь, попадая на сайт упирается в форму авторизации. Удачно залогинившись посетителю назначается определённая роль — администратор, писатель, читатель и т.д.
Ничего необычного, но по неопытности возникает закономерный вопрос: как правильно реализовать авторизацию в MVC?
В частности, интересует:
1. Следует ли осуществлять разграничения прав доступа через атрибуты класса пользователя просто или, видел как-то, через дополнительный объект аля «паспорт допуска»?
2. На каком этапе проверяется правомерность нахождения пользователя в том или ином месте ресурса? Первичная отсечка незалогиненых пользователей + контроль доступа к конкретным контроллерам/действиям?
Я понимаю, что реализовать подобный функционал можно по разному, интересует именно как это сделать правильней в рамках паттерна MVC. Вопрос, понимаю, сформулирован очень расплывчато. Буду уточнять и дополнять по мере поступления встречных вопросов.
P.S.
Быть может, порекомендуете книги/статьи на эту тему?
1. Следует сделать атрибут класа. Не стоит плодить тысячи класов.
2. Как угодно, только чтобы любой скрипт правильно учитывал права доступа.
Глобально по теме вопроса:
MVC не ограничивает вас в праве выбора в данном контексте. Просто следите за тем, чтобы три разных сущности были логичиски отделены друг от друга.
P.S. Книга: Приемы объектно-ориентированного проектирования Э.Гамма Р.Хелм Р.Джонсон Д.Влиссидес. Про php промолчит, про MVC скажет не многое, но раскажет о том как правильно проектировать. ИМХО, то что нужно.
Я бы сделал объект класса «роль», который был бы свойством класса «пользователь». Проверку доступа к текущей секции можно сделать в контроллере, до загрузки данных и представления.
Нет ни какого консенсуса между разработчиками и даже в теории, что же такое MVC, все понимают его по разному, так что нет правильного решения в общем случае, а есть правильные решения для каждого конкретного фреймворка или CMS. habrahabr.ru/blogs/webdev/117791/ Кстати, MVC можно реализовать на том же php не имея ни одного класса.
Если учите mvc — начните с фреймворка какого-нибудь, в котором довольно жестко задана структура приложения и большинство подобных вопросов отпадут еще на этапе их формирования.
Например, возьмите симфони и их приложение jobeet