2009-03-11 4 views

ответ

3

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

0

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

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

+3

Ваше определение MVC неверен. M в MVC является самой важной частью, это не является немым объектом данных. Поведение должно быть в М, это была ваша бизнес-логика. Независимо от того, является ли авторизация частью бизнес-логики, мне не ясно. –

0

Модель.

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

Таким образом, вы должны сделать все авторизационные коды на уровне модели. В идеале все будет работать нормально. Если нет, тогда контроллер перейдет к правильному логину.

1

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

1

Контроллер!

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

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

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

Смежные вопросы