MVC Core |Доступ запрещен |Ролевая проблема с MVC Core 2.2 - PullRequest
0 голосов
/ 17 декабря 2018

Я использую VS Code на Mac для создания нескольких проектов MVC.Они созданы при создании для использования Identity Framework.Затем я захожу в базу данных, создаю роль администратора и привязываю ее к своему пользователю.Когда я запускаю проект локально с помощью кода Visual Studio и пытаюсь посетить контроллер, которому я присвоил эту роль, я не могу войти. «Отказано в доступе ... у вас нет разрешения ..».

Если я открою тот же проект в Visual Studio 2017, все будет работать как надо.Это сбило меня с толку.Я не могу понять, что мне не хватает. У меня нет проблем с передачей данных из БД в представление.Как только я добавляю [Authorize (Roles = "Admin")] на контроллер, я перенаправляюсь на страницу входа.

Я использую проект Core 2.2 MVC с базой данных MySQL с соединителем Pomelo.EntityFrameworkCore.MySql.

  • мой пользователь настраивается через пользовательский интерфейс через «Register»
  • моя роль и назначение этого пользователя выполняется через клиент SQL

1 Ответ

0 голосов
/ 18 декабря 2018

Это может произойти, если вы настраиваете схемы аутентификации с помощью политики по умолчанию, например:

services.AddAuthorization(options =>
{
    var defaultRequirements = new[] {
        new DenyAnonymousAuthorizationRequirement()
    };

    var defaultSchemes = new[] {
        CookieAuthenticationDefaults.AuthenticationScheme,
        JwtBearerDefaults.AuthenticationScheme,
        OpenIdConnectDefaults.AuthenticationScheme
    };

    var defaultPolicy = new AuthorizationPolicy(defaultRequirements, defaultSchemes);
    options.DefaultPolicy = defaultPolicy;
});

Когда вы добавляете требование к атрибуту Authorize (здесь, роль),политика по умолчанию игнорируется, а ваш пользователь не аутентифицирован.

Если это так, вы можете добавить два атрибута Authorize на свой контроллер: один для принудительной аутентификации, а другой для роли:

[Authorize] // deny anonymous, force authentication
[Authorize(Roles = "Admin")] // additional roles check
public class MyController : Controller
{
}

Добавление нескольких атрибутов Authorize позволяет проверить несколько требований (логика AND).

...