ASP.NET Core WebApi EF: добавить роль пользователю

Когда я добавляю роль своему пользователю (код ниже), она не добавляется в таблицу AspNetRoles, но нужно ли?

var userResult = await _userManager.CreateAsync (admin, AdminPassword);
var roleResult = await _userManager.AddToRoleAsync (admin, Roles.AdminRole);

И когда я прикрепляю атрибут Авторизовать к такому методу: (Roles = Roles.AdminRole), он говорит, что у меня нет разрешения: 403 Forbidden.

Кроме того, когда я пытаюсь получить роли пользователя, он возвращает пустой массив:

return await _userManager.GetRolesAsync(user);

Вот мой метод API:

// Host/api/roles/createrole
[Authorize(Roles = Roles.AdminRole)]
[HttpPost]
public async Task<IActionResult> CreateRole([FromBody] CreateRoleViewModel model)
{
    if (!ModelState.IsValid)
        return BadRequest();

    var result = await _roleManager.CreateAsync(new IdentityRole(model.RoleName));

    if (!result.Succeeded)
        return BadRequest(result);

    return Ok();
}

Вот моя инициализация:

public void Initialize()
{
    InitializeRoles();
    InitializeAdmin();     
}

#region Private Methods

private void InitializeRoles()
{
    if (_roleManager.Roles.Any())
        return;

    var role = new IdentityRole(Roles.AdminRole);
    var roleResult = _roleManager.CreateAsync(role).Result;
}

private void InitializeAdmin()
{
    if (_userManager.Users.Any())
        return;

    var admin = new User
    {
        UserName = AdminUsername,
        Email = AdminUsername,
    };

    var userResult = _userManager.CreateAsync(admin, AdminPassword).Result;
    var roleResult = _userManager.AddToRoleAsync(admin, Roles.AdminRole).Result;
}

Разве вам не нужно вызывать какой-то метод _userManager.SaveChanges() для фиксации ваших изменений?

Wurd 18.05.2018 10:40

@Wurd Нет, не нужно

Nikita Goncharuk 18.05.2018 10:50

Я воссоздал базу данных и снова инициализирую ее, но мой администратор не проходит проверку для атрибута авторизации.

Nikita Goncharuk 18.05.2018 10:55

@NikitaGoncharuk попробуйте использовать await для асинхронных задач. Вот так: var roleResult = await _roleManager.CreateAsync(role).Result;

Anton Toshik 18.05.2018 14:18

Да, вам нужно сохранить эту роль в таблице AspNetRoles - если вы не ожидали CreateAsync, значит, вы пропустили IdentityResult.

Mark G 18.05.2018 19:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
44
0

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

Похожие вопросы

Способы ASP.NET Core для обработки настраиваемого формата ответа / вывода в веб-API
Сессия потеряна в ядре .Net при выполнении запроса на выборку из JS
Почему StatusCode не устанавливается из Mvc при возникновении исключения
Совместное использование синглтона между промежуточным программным обеспечением, контроллерами и фоновыми службами
Исключение пузыря для использования промежуточного программного обеспечения statuspagecodes после фильтра исключений asp.net core
BadHttpRequestException из-за MinRequestBodyDataRate и плохого соединения
Получите ошибку «502 - веб-сервер получил недопустимый ответ, выступая в качестве шлюза или прокси-сервера» при открытии страницы регистрации в Azure
Как использовать команду публикации с веб-развертыванием для основных приложений asp.net
Идентификация ядра Asp.net Использовать AspNetUserClaims или AspNetRoleClaims?
Интеграция и модульные тесты больше не работают в ASP.NET Core 2.1, когда не удается найти сборки во время выполнения