Каков наилучший способ переключения между аутентифицированными и анонимными представлениями на веб-страницах asp.net MVC3? - PullRequest
2 голосов
/ 14 февраля 2012

Я немного поэкспериментировал с MVC3, и я думаю о том, чтобы использовать то, чему я научился, и создать настоящий проект, используя его, но есть одна вещь, которую я никогда не видел ясно. объяснил или продемонстрировал и надеялся, что я смогу получить небольшую обратную связь от сообщества здесь по этому вопросу. Вопрос в том, что когда у вас есть страница, которая может находиться в двух состояниях, в зависимости от того, аутентифицирован ли посетитель, какие методы мне следует использовать для переключения между двумя состояниями? Должна ли каждая страница иметь два совершенно независимых представления и общую модель, общую для обоих представлений, или лучше всего подходить с частичными представлениями, чтобы контролировать разницу между зарегистрированными или анонимными элементами? Или было бы лучше иметь две разные модели И два разных вида, а затем переключаться между ними на этапе контроллера?

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

Есть ли у кого-нибудь какие-либо истории, рассказывающие о том, как они это сделали? Даже «Не делай так» было бы полезно просто прояснить некоторые варианты.

Причина, по которой я спрашиваю, состоит в том, что я хотел бы сделать сайт, который не будет полностью поврежден, пока вы не войдете в систему и не зарегистрируетесь, это сводит меня с ума, когда вы не можете пройти домашнюю страницу сайта, не пройдя через процесс регистрации, поэтому я хочу иметь возможность предоставлять «облегченную» версию каждой страницы без содержания, специфичного для пользователя, даже если посетитель не прошел проверку подлинности, а затем добавить дополнительные функции на страницу при входе в систему.

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

Обратная связь приветствуется, я хотел бы услышать, что работает, а что нет для других людей.

Редактировать: Менее двусмысленный способ задать вопрос.

На моей домашней странице у меня есть поле имени пользователя / пароля в верхнем углу с кнопкой «логин» и абзацем текста в середине домашней страницы. Когда пользователь вводит свое имя пользователя и пароль, а затем нажимает кнопку «Отправить», я хочу, чтобы этот элемент управления «логин» изменился на сообщение «Welcome: {username}» и кнопку выхода из системы, и я хочу, чтобы текст на главной странице переключился на «аутентифицированный». сообщение То, что я не знаю, это где эти изменения в структуре страницы, эти два представления? Authenticated_Homepage и Anonymous_Homepage, имеют ли они общую модель или у меня только одно представление домашней страницы и я использую частичные представления для меняющихся деталей, или я использую роли на контроллере для возврата разных представлений?

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

1 Ответ

0 голосов
/ 14 февраля 2012

Это не было бы двумя взглядами. MVC обычно использует аутентификацию / авторизацию на уровне метода Action . Но в вашем сценарии вы должны сделать что-то подобное в View code:

@if(Request.IsAuthenticated) {
    <text>Welcome <strong>@User.Identity.Name</strong>!
    [ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
}
else {
    @:[ @Html.ActionLink("Log On", "LogOn", "Account") ]
}

Это получено непосредственно из шаблона MVC 3. В данном случае это код Partial View, который отображается в _Layout.cshtml Shared View. Таким образом, это отображается на каждой странице (думайте о _Layout как о «главной странице», если вы используете фон WebForms).

Все, что делает код Partial View, это тест для аутентифицированного пользователя. Если это аутентифицированный пользователь, то отображается приветственное сообщение. Если это , а не , тогда есть ActionLink(), чтобы получить доступ к методу Login Action, чтобы иметь возможность авторизации.

Обычно, хотя вы бы ограничивали / разрешали пользователям / ролям определенные Методы действий, вот что вы должны сделать:

 public ActionResult EverybodyCanAccess()
 {
     return View();
 }

 [Authorize]
 public ActionResult OnlyAuthenticatedUsersCanAccess()
 {
     return View();
 }

 [Authorize(Roles = "Admin")]
 public ActionResult OnlyAdminsCanAccess()
 {
     return View();
 }

 [Authorize(Users = "John, Bob")]
 public ActionResult OnlyJohnAndBobCanAccess()
 {
     return View();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...