Hurro.
Я пытаюсь добиться условной маршрутизации в зависимости от того, является ли текущий пользователь администратором или нет.Система имеет только два режима: административный или неадминистративный, и ничего более.Я использую области для своей административной области, потому что имена контроллеров будут одинаковыми, но они будут обеспечивать различную функциональность почти в каждом случае.
Однако в этой системе администраторы не должнызная свое местоположение администратора, они просто знают, что они используют систему, чтобы делать что-то еще, кроме того, что делают обычные пользователи.Я не хочу, чтобы между ними было какое-либо различие с точки зрения URL.То, что я хочу сделать, это иметь возможность делать что-то вроде mysite.com/AuditHistory и зависеть от того, являетесь ли вы администратором или пользователем, будет зависеть от того, какой контроллер используется.Так что, если пользователь делает этот запрос, он будет использовать AuditHistoryController
в папке обычных контроллеров, но если это администратор, он будет использовать AuditHistoryController
в Areas / Admin / Controllers.
Я видел использование IRouteConstraint
и могу сделать что-то вроде следующего:
public class AdminRouteConstraint : IRouteConstraint
{
public AdminRouteConstraint() { }
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return httpContext.User.IsInRole("Admin");
}
}
С помощью следующего:
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", controller = "Home", id = UrlParameter.Optional },
new { controller = new AdminRouteConstraint() }
);
Могу ли я просто избавиться от "Admin"/ "впереди и сделать то же самое для других маршрутов, но сказать UserRouteConstraint
?Хотя я нигде не видел, чтобы это было сделано, и не уверен, что это правильно.
Есть идеи, как это сделать?