Переопределите маршрутизацию в ASP.NET CORE 2.2, чтобы неявно направлять в область, если у пользователя есть некоторые разрешения - PullRequest
0 голосов
/ 26 февраля 2019

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

Допустим, для обычного пользователя url site/shop/12 долженМаршрут к ShopController

, но для администратора это должен маршрут к AdminArea/ShopController


Пожалуйста, учтите, что этот вопрос не о перенаправлении HTTP, а о расширении инфраструктуры на платформеуровень, чтобы позволить дополнительную функциональность при маршрутизации или вызове контроллера

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Я думаю, что лучший способ - установить правильные URL-адреса во внешней части, а затем проверить запрос в конечной точке, выполнив что-то вроде этого:

        [HttpGet]
        [Route("v1.0/download/document")]
        public IActionResult download_document(int id, string token)
        {
            try
            {
                if (token == null || isNotAdmin(token))
                    return Unauthorized();

Таким образом, ваши конечные точкизащищены и вы избегаете перенаправлений.Плюс, на мой взгляд, все имеет намного больше смысла на переднем конце

0 голосов
/ 27 февраля 2019

Вы можете использовать Промежуточное программное обеспечение для перезаписи URL , чтобы перенаправить запрос для пользователя-администратора

1.Создать правило перенаправления:

public class RewriteRules
{
    public static void RedirectRequests(RewriteContext context)
    {
        //Your logic
        var IsAdminRole = context.HttpContext.User.IsInRole("Admin");
        if (IsAdminRole)
        {
            var request = context.HttpContext.Request;
            string area = "AdminArea";
            var path = request.Path.Value;

            //Add your conditions of redirecting
            if(path.Split("/")[1] != area)// If the url does not start with "/AdminArea"
            {
                context.HttpContext.Response.Redirect($"/{area}{ request.Path.Value }");
            }                          
        }
    }
}

2.Используйте промежуточное ПО вМетод настройки запуска:

app.UseAuthentication();//before the Rewriter middleware

app.UseRewriter(new RewriteOptions()
            .Add(RewriteRules.RedirectRequests)
            );
0 голосов
/ 26 февраля 2019

Добавьте логику к методу контроллера, который обрабатывает site/shop/12, чтобы проверить, является ли пользователь администратором, и, если это так, перенаправить на соответствующую область администратора и контроллер.

var isAdmin = IsUserAnAdmin();

if (isAdmin) {

    // This will redirect to the Index method defined in the ShopController
    // in the area name AdminArea
    return RedirectToAction("Index", "Shop", new { Area = "AdminArea" });

}
...