Ответ 1
Конечно, украсьте свои действия или весь класс [Authorize]
, и для этого потребуется, чтобы пользователь вошел в систему первым.
Я создаю веб-приложение с использованием ASP.NET MVC 4 и С#.
Я хочу, чтобы все пользователи вошли в систему перед использованием приложения.
Я использую членство ASP.NET с пользовательской базой данных.
Один метод - проверить, является ли Membership.GetUser()
нулевым или нет в каждой функции.
Но нет ли более простого способа, чем проверка состояния входа пользователя в каждую функцию? (возможно, проверка в web.config, global.asax и т.д.)??)
Конечно, украсьте свои действия или весь класс [Authorize]
, и для этого потребуется, чтобы пользователь вошел в систему первым.
Поместите [Authorize]
по каждому действию, к которому вы хотите только войти в систему. Вы также можете сделать это на уровне контроллера, сделав все действия в контроллере безопасными. Последнее, вероятно, лучше для вас, поскольку вы, вероятно, хотите, чтобы все ваши страницы были отключены для гостей.
Вот что выглядит классный:
[Authorize]
public class SomethingController
{
//...
}
и здесь один уровень действия:
public class SomethingController
{
[Authorize]
public ActionResult SomeAction(Parameter someParameter)
{
//...
}
}
Другой способ сделать это, если все или большинство ваших страниц используют одну и ту же главную страницу, заключается в том, чтобы поставить:
<script type="text/javascript>
@if(!Request.IsAuthenticated) {
window.location.href = redirectURL;
}
</script>
или если вы используете синтаксис бритвы,
<script type="text/javascript>
<% if(!Request.IsAuthenticated) { %>
window.location.href = redirectURL;
<% } %>
</script>
на главной странице. Таким образом, все страницы, которые используют эту главную страницу, будут перенаправлены в другом месте, если пользователь не войдет в систему. Это применимо только в том случае, если вы используете встроенную аутентификацию. ПРИМЕЧАНИЕ. Этот параметр гораздо менее безопасен, чем первый вариант. Используйте это только в том случае, если безопасность сайта не является большой проблемой.
Вы можете написать собственный атрибут [Authorize]
. Затем просто украсьте контроллеры/действия с ним или если все действия требуют авторизации, вы можете зарегистрировать его как глобальный фильтр действий.
Вы можете поместить атрибут [Authorize]
на свой контроллер или на отдельные методы в контроллере, чтобы выбрать, кто может открыть действия и с помощью каких разрешений. Вы также можете разрешить такие роли, как: [Authorize(Roles="Admin")]
, где вы разрешаете только пользователям в роли администратора получать доступ к вашему действию/контроллеру. Например:
[Authorize(Roles="SimpleUser")] or with no roles [Authorize]
public ActionResult Index()
{
return View();
}
[Authorize]
[HttpPost]
public ActionResult Index(FormCollection form)
{
... whatever logic
return View();
}
Надеюсь, что это поможет;]
Используйте [Авторизовать] на уровне класса
если вы хотите разрешить анонимный доступ к некоторым действиям, используйте [AllowAnonymous]
Я знаю, что у этого вопроса уже есть ответ, но если намерение состоит в том, чтобы заблокировать все приложение, за исключением нескольких действий контроллера, я чувствую, что это лучшее решение...
В startup/init для вашего приложения добавьте...
httpConfig.filters.Add(new AuthorizeAttribute());
... затем на действия, которые вы DONT хотите защитить...
[AllowAnonymous]
public ActionResult Hello() { return View(); }