2

注册用户时使用 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);
    }

Modele 数据库用户角色:

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

模型用户

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

1 回答 1

1

您可以检索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");
于 2018-08-29T19:40:53.507 回答