Маршрутизация на основе ролей MVC

У меня есть проект с двумя областями / Admin и / User.

Адресом по умолчанию является / Admin / Home / Index и пользовательский маршрут по умолчанию – / User / Home / Index .

Можно ли реализовать маршрутизацию, чтобы сделать свой домашний URL-адрес похожим на / Профиль / Индекс, но показывать контент из / Admin / Home / Index для администраторов и / Пользователь / Главная / Индекс для пользователей?

обн

Наконец, узнайте, как это сделать

context.MapRoute( "Admin", "Profile/{action}", new { area = AreaName, controller = "Home", action = "Index" }, new { RoleConstraint = new Core.RoleConstraint() }, new[] { "MvcApplication1.Areas.Admin.Controllers" } ); ... context.MapRoute( "User", "Profile/{action}", new { area = AreaName, controller = "Home", action = "Index" }, new { RoleConstraint = new Core.RoleConstraint() }, new[] { "MvcApplication1.Areas.User.Controllers" } ); public class RoleConstraint : IRouteConstraint { public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) { string roleName = db.GetRoleByUserName(httpContext.User.Identity.Name); string areaName = route.Defaults["area"].ToString(); return areaName == roleName; } } 

Это работает, но для меня это не способ MVC. Кто-нибудь знает, как это сделать правильно?

Да. Пример, который вы показали, очень близок ко многим из предоставленных Microsoft образцов для использования ограничений маршрутов. Механизм маршрутизации действует как предварительный прокси (или маршрутизатор, если он есть) до того, как запрос будет передан в элемент управления. Такие предметы, как IRouteConstraint, определяются так, что вы можете делать то, что вы описали.

Мне нравится это решение, как было отмечено, но нужно иметь в виду, что сама маршрутизация не должна использоваться как единственная форма безопасности. Просто имейте в виду, что вы должны защищать свои controllerы и действия с помощью атрибута [Authorize] или, тем не менее, вы ограничиваете доступ.

  • Авторизация ASP.NET MVC
  • Ограничить доступ к определенному controllerу по IP-адресу в бета-версии ASP.NET MVC
  • Пользовательский заголовок авторизации HTTP
  • ASP.NET MVC Forms Authentication + Авторизовать атрибут + простые роли
  • ASP.NET Web API: правильный способ возврата 401 / несанкционированного ответа
  • Как вызвать веб-службу RESTful с Android?
  • Как обрабатывать аутентификацию / авторизацию с пользователями в базе данных?
  • ASP.NET MVC - Как показать несанкционированную ошибку на странице входа?
  • Маршрутизация и токен аутентификации AngularJS с webapi
  • Аутентификация на основе токенов в ядре ASP.NET (обновлена)
  • Давайте будем гением компьютера.