Entity Framework Core Назначить роль пользователю после создания

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

У меня есть это на моей странице создания пользователя

    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }


        _context.Users.Add(User);

        await _context.SaveChangesAsync();

        _toastNotification.AddSuccessToastMessage("Utilizador Adicionado com sucesso");

        return RedirectToPage("./Index");
    }

Я попробовал на модели

    public User()
    {
        IsActivo = true;
        UserRoles.Add(new UserRole { RoleId = 4 });
    }

это не работает к сожалению.

2 ответа

Как для пользователей, так и для ролей вы должны использовать связанные менеджеры: UserManager<TUser> а также RoleManager<TRole>, Есть ряд вещей, которые должны произойти, кроме простой настойчивости, с которой менеджеры справляются, а добавление непосредственно в контекст - нет. Здесь же нужно только UserManager<TUser> чтобы справиться со всем.

public class RegisterModel : PageModel
{
    private readonly UserManager<IdentityUser> _userManager;

    public RegisterModel(UserManager<IdentityUser> userManager)
    {
        _userManager = userManager;
    }

    ...
}

Затем:

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    await _userManager.CreateUserAsync(User);
    await _userManager.AddToRoleAsync(User, "foo"); // where "foo" is the name of your role

    _toastNotification.AddSuccessToastMessage("Utilizador Adicionado com sucesso");

    return RedirectToPage("./Index");
}

Хорошо, я потратил некоторое время на перечитывание руководств по Entity Framework, и это сработало для меня

   public async Task<IActionResult> OnPostAsync()
   {
        if (!ModelState.IsValid)
        {
            return Page();
        }


        _context.Users.Add(User);
        _context.UserRoles.Add(new UserRole { User = User, Role = _context.Roles.FirstOrDefault(r => r.Nome == "User")});

        await _context.SaveChangesAsync();

        _toastNotification.AddSuccessToastMessage("Utilizador Adicionado com sucesso");

        return RedirectToPage("./Index");
    }
Другие вопросы по тегам