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