Когда я добавляю роль своему пользователю (код ниже), она не добавляется в таблицу 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;
}
@Wurd Нет, не нужно
Я воссоздал базу данных и снова инициализирую ее, но мой администратор не проходит проверку для атрибута авторизации.
@NikitaGoncharuk попробуйте использовать await для асинхронных задач. Вот так: var roleResult = await _roleManager.CreateAsync(role).Result;
Да, вам нужно сохранить эту роль в таблице AspNetRoles - если вы не ожидали CreateAsync, значит, вы пропустили IdentityResult.





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