Задать вопрос
gomzyakov
@gomzyakov
PHP-разработчик

Как правильно реализовать авторизацию на PHP/MVC?

Есть некоторый проект, пишется на чистом PHP без использования фрэймворков.



Не авторизованный пользователь, попадая на сайт упирается в форму авторизации. Удачно залогинившись посетителю назначается определённая роль — администратор, писатель, читатель и т.д.



Ничего необычного, но по неопытности возникает закономерный вопрос: как правильно реализовать авторизацию в MVC?



В частности, интересует:

1. Следует ли осуществлять разграничения прав доступа через атрибуты класса пользователя просто или, видел как-то, через дополнительный объект аля «паспорт допуска»?

2. На каком этапе проверяется правомерность нахождения пользователя в том или ином месте ресурса? Первичная отсечка незалогиненых пользователей + контроль доступа к конкретным контроллерам/действиям?



Я понимаю, что реализовать подобный функционал можно по разному, интересует именно как это сделать правильней в рамках паттерна MVC. Вопрос, понимаю, сформулирован очень расплывчато. Буду уточнять и дополнять по мере поступления встречных вопросов.



P.S.

Быть может, порекомендуете книги/статьи на эту тему?
  • Вопрос задан
  • 6516 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
try4tune
@try4tune
Простите, но причем тут MVC?
Ответ написан
Horse
@Horse
1. Следует сделать атрибут класа. Не стоит плодить тысячи класов.
2. Как угодно, только чтобы любой скрипт правильно учитывал права доступа.

Глобально по теме вопроса:
MVC не ограничивает вас в праве выбора в данном контексте. Просто следите за тем, чтобы три разных сущности были логичиски отделены друг от друга.

P.S. Книга: Приемы объектно-ориентированного проектирования Э.Гамма Р.Хелм Р.Джонсон Д.Влиссидес. Про php промолчит, про MVC скажет не многое, но раскажет о том как правильно проектировать. ИМХО, то что нужно.
Ответ написан
Комментировать
try4tune
@try4tune
Я бы сделал объект класса «роль», который был бы свойством класса «пользователь». Проверку доступа к текущей секции можно сделать в контроллере, до загрузки данных и представления.
Ответ написан
Комментировать
MarcusAurelius
@MarcusAurelius
автор Impress Application Server для Node.js
Нет ни какого консенсуса между разработчиками и даже в теории, что же такое MVC, все понимают его по разному, так что нет правильного решения в общем случае, а есть правильные решения для каждого конкретного фреймворка или CMS. habrahabr.ru/blogs/webdev/117791/ Кстати, MVC можно реализовать на том же php не имея ни одного класса.
Ответ написан
Комментировать
@whynot
Если учите mvc — начните с фреймворка какого-нибудь, в котором довольно жестко задана структура приложения и большинство подобных вопросов отпадут еще на этапе их формирования.
Например, возьмите симфони и их приложение jobeet
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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