Entity Framework Core Назначить роль пользователю после создания - PullRequest
0 голосов
/ 26 мая 2019

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

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

    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 ]

1 голос
/ 28 мая 2019

Как для пользователей, так и для ролей вы должны использовать связанные менеджеры: 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");
}
0 голосов
/ 28 мая 2019

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

   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");
    }
...