Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

MVC концепция. Во view делать проверку роли правильно?

#php #mvc


Интересует вопрос про концепцию MVC.

Есть пользователи и роли. Представьте себе, что во VIEW есть комментарии. 
Есть роли у пользователя user и admin.

Если роль user, тогда показывать просто комментарии, если роль пользователя admin
- тогда показывать иконку к каждому комментарию "edit".

Верно ли делать во VIEW проверку например, так:


Ответы

Ответ 1



Тут все немного более интересно. Этот код не должен быть целиком ни в представлении, ни в контроллере, ни в модели. Контроллер тем или иным способом должен получать объект пользователя - с помощью модели или просто из внешнего сервиса - и запихивать его в контекст представления. Сам контроллер в процессе создания и обработки пользователя не участвует никак, а просто передает его. В представлении же уже вызывается метод объекта пользователя - например, isAdmin(), который позволяет определить текущий статус пользователя, не прибегая к прямому сравнению, вынесет логику наружу, а для представления это будет сущствовать исключительно как флаг "истина/ложь". Конечно, это плохо масштабируется, поэтому с увеличением количества ролей можно либо создавать отдельные шаблоны (потому что все равно не получится хранить много ветвей в одном), либо создать некоторый AccessManager, у которого есть единственный метод hasAccessTo($user, $resourceKey) (или аналог), внутри которого спрятана вся логика по нахождению прав доступа. Обычно, впрочем, стараются все упростить до того, чтобы к моменту рендеринга все данные уже были известны, но если в коде представления запускается подобные функционал проверки - это не страшно.

Комментариев нет:

Отправить комментарий