Где в MVC правильно разместить код авторизации? - PullRequest
5 голосов
/ 11 марта 2009

В MVC, где правильно разместить код авторизации?
Контроллер?
Модель?
По мнению?

Повсюду?

Ответы [ 5 ]

3 голосов
/ 11 марта 2009

Я голосую за то, чтобы поместить это туда, где это имеет смысл. Большая часть моей работы с авторизацией обрабатывается путем украшения действий контроллера (или даже некоторых контроллеров) с помощью AuthorizeAttribute - или атрибута, полученного из него. В некоторых случаях, например, в моем меню, я прибегал к проверке авторизации в самом коде представления, а не к ее вычислению в каждом контроллере и передаче флагов во ViewData. Есть несколько случаев, когда определенные аспекты модели доступны только для определенных ролей, и в этих случаях я прибегал к расширению модели методами, которые могут взять текущего пользователя и роли и выполнить проверку там.

1 голос
/ 11 марта 2009

Контроллер!

Ваш вид должен обрабатывать только пользовательский интерфейс и отображение Ваша Модель должна представлять данные в вашей системе. Ваш контроллер должен обрабатывать логику работы системы.

Авторизация пользователя включает в себя получение учетных данных, предоставленных представлением, проверку их по какому-либо списку авторизации в модели и затем проверку.

Это делается в контроллере: Получить учетные данные пользователя из View if (сравните со списком пользователей в совпадении с моделью) авторизовать пользователей еще отказать в доступе

1 голос
/ 11 марта 2009

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

0 голосов
/ 11 марта 2009

Модель.

Контроллер просто для переключения по-разному. Просмотр только для ... просмотра.

Таким образом, вы должны сделать все коды авторизации на уровне модели. В идеале все будет работать просто отлично. Если нет, то контроллер доставит пользователя к соответствующему окну входа в систему.

0 голосов
/ 11 марта 2009

Если вам нужно выбрать между M, V или c, C является правильным местом. Но я рекомендую архитектуру, в которой все ваше приложение содержится в библиотеках, а пользовательский интерфейс - всего лишь тонкий слой. В итоге вы вызываете стек из контроллера, но код не находится в контроллере.

В MVC Модель - это просто модель или «тупой объект данных», если хотите. Он предназначен для удержания состояния и не должен диктовать поведение. Представление предназначено для взаимодействия с пользователем и также является «тупым»; представление обрабатывает пользовательский интерфейс. Контроллер - это место, где находится поведение, или точка входа в поведение в случае, когда логика приложения находится в библиотеках. Имеет смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...