Создавая проект, в котором важны разные роли / типы пользователей, я создал специальную службу промежуточного программного обеспечения для выбора подходящих ролей (если доступно несколько), а также проходил аутентификацию через Azure Ad с политикой для каждой роли.Это прекрасно работает, но проблема возникает при попытке сгруппировать роли по областям.
Я попытался создать разные области для соответствующих групп пользователей, поэтому, если вы войдете в систему как «Перевозчик», я буду перенаправлен на «Carrier / Home / Index ".
Провели много исследований здесь и в других местах, но большинство кажется устаревшими или неполными, поэтому я решил сделать сообщение.
public class RoleConstraint : IRouteConstraint
{
private readonly RequiredRole _requiredRole;
public RoleConstraint(RequiredRole requiredRole)
{
_requiredRole = requiredRole;
}
public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
{
var selectedRoleString = httpContext.Request.Cookies[SysVariables.SelectedRoleCookieKey];
var selectedRole = selectedRoleString.ToRequiredRole();
var area = (string) values.GetValueOrDefault("Area");
if (area == "Admin" && selectedRole == RequiredRole.Admin)
{
return true;
}
if (area == "Internal" && selectedRole == RequiredRole.Internal)
{
return true;
}
if (area == "Customer" && selectedRole == RequiredRole.Customer)
{
return true;
}
return selectedRole == _requiredRole;
}
}
Прикладная маршрутизация вStartup.cs / Configure ():
app.UseMvc(routes => {
routes.MapRoute(
name: "Internal_default",
template: "Internal/{controller}/{action}/{id?}",
defaults: new { action = "Index" },
constraints: new { author_role = new RoleConstraint(RequiredRole.Internal) }
);
routes.MapRoute(
name: "customer_route",
template: "{area}/{controller}/{action}/{id?}",
defaults: new { area = "Customer", controller = "Home", action = "Index" },
constraints: new { author_role = new RoleConstraint(RequiredRole.Customer) }
);
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=ChooseLanguage}/{id?}"
);
});
Все базовые контроллеры клиента должны наследоваться отCustomerBaseController.
Если бы кто-нибудь мог помочь мне здесь, это было бы очень ценно!Заранее спасибо.