Подтвердить что ты не робот

Как требуется авторизация в рамках всего приложения ASP.NET MVC

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

Должен ли я добавлять аннотацию [Authorize] перед заголовком каждого класса? Как здесь:

namespace WebApplication2.Controllers {
[Authorize]
    public class HomeController : Controller {




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

        public ActionResult About() {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact() {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }
}

или есть ярлык для этого? Что делать, если я хочу изменить правила для одного и единственного действия в конкретном контроллере?

4b9b3361

Ответ 1

Самый простой способ - добавить атрибут Authorize в конфигурацию фильтра, чтобы применить его к каждому контроллеру.

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());

        //Add this line
        filters.Add(new AuthorizeAttribute());
    }
}

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

[Authorize]
public abstract class BaseSecuredController : Controller
{
    //Various methods can go here
}

И теперь вместо наследования от Controller все ваши контроллеры должны наследовать этот новый класс:

public class MySecureController : BaseSecuredController
{
}

Примечание. Не забудьте добавить атрибут AllowAnonymous, когда вам нужно, чтобы он был доступен для пользователей без регистрации.

Ответ 2

Чтобы построить ответ DavidG, если вам нужно потребовать определенную роль (в Windows authentication, например, когда все разрешены), вы можете сделать это:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());

        filters.Add(new AuthorizeAttribute { Roles = "MyApp Access" });
    }
}