MVC Core | Доступ запрещен | Проблема с ролью в MVC Core 2.2

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

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

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

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

Вы пробовали выйти из системы, затем назначить роль и снова войти в систему?

JamesS 17.12.2018 15:36

Нет, не видел. Также я наткнулся на это: stackoverflow.com/questions/52531131/…

Matt 17.12.2018 15:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
605
1

Ответы 1

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

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).

Другие вопросы по теме