ASP Core 2.1 - Маршрутизация соответствующей пользовательской роли в область - PullRequest
0 голосов
/ 02 апреля 2019

Создавая проект, в котором важны разные роли / типы пользователей, я создал специальную службу промежуточного программного обеспечения для выбора подходящих ролей (если доступно несколько), а также проходил аутентификацию через 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?}"
            );
        });

Area folder structure Attributes for controller

Все базовые контроллеры клиента должны наследоваться отCustomerBaseController.

Если бы кто-нибудь мог помочь мне здесь, это было бы очень ценно!Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...