#php #mvc
Интересует вопрос про концепцию MVC. Есть пользователи и роли. Представьте себе, что во VIEW есть комментарии. Есть роли у пользователя user и admin. Если роль user, тогда показывать просто комментарии, если роль пользователя admin - тогда показывать иконку к каждому комментарию "edit". Верно ли делать во VIEW проверку например, так:... if($role == "admin") { echo " Или эту логику нужно вынести в контроллер? Но если в контроллер, получается, что мы часть VIEW выносим в него, а это тоже нарушает MVC.
Ответы
Ответ 1
Тут все немного более интересно. Этот код не должен быть целиком ни в представлении, ни в контроллере, ни в модели. Контроллер тем или иным способом должен получать объект пользователя - с помощью модели или просто из внешнего сервиса - и запихивать его в контекст представления. Сам контроллер в процессе создания и обработки пользователя не участвует никак, а просто передает его. В представлении же уже вызывается метод объекта пользователя - например, isAdmin(), который позволяет определить текущий статус пользователя, не прибегая к прямому сравнению, вынесет логику наружу, а для представления это будет сущствовать исключительно как флаг "истина/ложь". Конечно, это плохо масштабируется, поэтому с увеличением количества ролей можно либо создавать отдельные шаблоны (потому что все равно не получится хранить много ветвей в одном), либо создать некоторый AccessManager, у которого есть единственный метод hasAccessTo($user, $resourceKey) (или аналог), внутри которого спрятана вся логика по нахождению прав доступа. Обычно, впрочем, стараются все упростить до того, чтобы к моменту рендеринга все данные уже были известны, но если в коде представления запускается подобные функционал проверки - это не страшно.