Как разрешить анонимному пользователю доступ к какой-либо странице в 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]
до объявления класса, чтобы работать правильно.