Как добавить AuthController добавить роль по умолчанию IdentityCore - PullRequest
0 голосов
/ 29 августа 2018

Как добавить роль по умолчанию при использовании IdentityCore при регистрации пользователя: Мой AuthController и класс использования UserMenager и SignInManager, IConfiguration, я хочу добавить роль при регистрации пользователя. У меня есть 3 модели, отвечающие за пользователя и роли. У одного пользователя может быть много ролей, но здесь он предполагает, что у пользователя есть одна роль, например, у студента одна роль может иметь много пользователей.

[AllowAnonymous]
[Route("api/[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
    private readonly IConfiguration _config;
    private readonly IMapper _mapper;
    private readonly UserManager<User> _userManager;
    private readonly SignInManager<User> _signInManager;

    public AuthController(IConfiguration config,
        IMapper mapper,
        UserManager<User> userManager,
        SignInManager<User> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
        _mapper = mapper;
        _config = config;
    }

    [HttpPost("register")]
    public async Task<IActionResult> Register(UserForRegisterDto userForRegisterDto)
    {
        var userToCreate = _mapper.Map<User>(userForRegisterDto);

        var result = await _userManager.CreateAsync(userToCreate, userForRegisterDto.Password);

        var userToReturn = _mapper.Map<UserForDetailedDto>(userToCreate);

        if (result.Succeeded)
        {
            return CreatedAtRoute("GetUser", 
                new { controller = "Users", id = userToCreate.Id }, userToReturn);
        }

        return BadRequest(result.Errors);
    }

Модель базы данных UserRole:

public class UserRole : IdentityUserRole<int>
{
    public User User { get; set; }
    public Role Role { get; set; }
}

Роли модели:

public class Role : IdentityRole<int>
{
    public ICollection<UserRole> UserRoles { get; set; }
}

модель User

public class User : IdentityUser<int>
{ ...public ICollection<UserRole> UserRoles { get; set; }}

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете извлечь User, который вы создали с помощью CreateAsync(), а затем использовать UserManager.AddToRoleAsync():

var result = await _userManager.CreateAsync(userToCreate, userForRegisterDto.Password);
User newUser = _userManager.Users.First(x => x.Email == userForRegisterDto.Email);
var roleResult = await _userManager.AddToRoleAsync(newUser, "YourDefaultRoleName");
...