Как разрешить анонимному пользователю доступ к какой-либо странице в MVC?

Я включил проверку подлинности формы в моем веб-приложении ASP.NET MVC. Я хочу разрешить анонимным пользователям доступ только к некоторым конкретным страницам, включая, например, Register.cshtml. Благодаря этому я смог разрешить доступ к своему CSS-файлу из моего корневого web.config.

<location path="Content/Site.css">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

Теперь я хочу разрешить анонимный доступ к другим страницам, таким как Дом и Регистрация. Кто-нибудь знает, как этого добиться?

2 ответа

Решение

В MVC вы обычно используете [Authorize] атрибут для управления авторизацией. Контроллеры или отдельные действия, связанные с этим атрибутом, потребуют авторизации пользователя для доступа к ним - все остальные действия будут доступны анонимным пользователям.

Другими словами, подход черного списка, где действия, требующие авторизации, заносятся в черный список для анонимных пользователей, использующих [Authorize] - все действия (не одеты с атрибутом) будут доступны.

Обновить:

С MVC4 был введен новый атрибут, а именно [AllowAnonymous] приписывать. Вместе с [Authorize] атрибут, теперь вы можете использовать подход белого списка. Подход "белого списка" достигается путем одевания всего контроллера [Authorize] атрибут, чтобы заставить авторизацию для всех действий в этом контроллере. Затем вы можете одеть определенные действия, которые не должны требовать разрешения, с [AllowAnonymous] атрибут, и, следовательно, белый список только этих действий. При таком подходе вы можете быть уверены, что случайно не забудете одеть действие с [Authorize]оставляя его доступным для всех, хотя и не должен.

Ваш код может быть примерно таким:

[Authorize]
public class UserController : Controller {

   [AllowAnonymous]
   public ActionResult LogIn () {
      // This action can be accessed by unauthorized users
   }

   public ActionResult UserDetails () {
      // This action can NOT be accessed by unauthorized users
   }
}

В Web.config у меня была ниже авторизация

<authorization>
    <deny users ="?"/>
</authorization>

это вызывает

[AllowAnonymous]

не работает правильно, мне пришлось удалить это разрешение моего Web.config, и во всех контроллерах поставить строку

[Authorize]

до объявления класса, чтобы работать правильно.

Другие вопросы по тегам