private void AddOrDeleteRoles(UserCreateParam model, User user) { var roleArray = (int[])Enum.GetValues(typeof(RoleWithId)); foreach (var roleId in model.RoleIds) { if (user.Roles.Any(x => x.RoleId == roleId)) { continue; } if (!roleArray.Contains(roleId)) { throw new Exception("角色不存在"); } var userRole = new UserRole { RoleId = roleId, User = user }; user.Roles.Add(userRole); } var deletedUserRoles = user.Roles.Where(userRole => !model.RoleIds.Contains(userRole.RoleId)) .ToList(); foreach (var deletedUserRole in deletedUserRoles) { deletedUserRole.User = null; user.Roles.Remove(deletedUserRole); } }
public async Task <Result> Post([FromBody] UserCreateParam model) { if (string.IsNullOrWhiteSpace(model.Password)) { throw new Exception("密码不能为空"); } var any = _userRepository.Query().Any(c => c.UserName == model.UserName); if (any) { return(Result.Fail("用户名已存在")); } var user = new User { UserName = model.UserName, Email = model.Email, FullName = model.FullName, PhoneNumber = model.PhoneNumber, IsActive = model.IsActive, AdminRemark = model.AdminRemark }; var roleIds = model.RoleIds.Distinct(); var roleArray = (int[])Enum.GetValues(typeof(RoleWithId)); foreach (var roleId in roleIds) { if (!roleArray.Contains(roleId)) { throw new Exception("角色不存在"); } var userRole = new UserRole { RoleId = roleId }; user.Roles.Add(userRole); userRole.User = user; } model.Password = model.Password.Trim(); if (model.Password.Length < 6 || model.Password.Length > 32) { throw new Exception("密码长度6-32字符"); } var result = await _userManager.CreateAsync(user, model.Password); if (!result.Succeeded) { return(Result.Fail(result.Errors.FirstOrDefault()?.Description)); } return(Result.Ok()); }
public async Task <Result> Put(int id, [FromBody] UserCreateParam model) { var user = await _userRepository.Query() .Include(x => x.Roles) .FirstOrDefaultAsync(x => x.Id == id); if (user == null) { throw new Exception("用户不存在"); } user.Email = model.Email; user.UserName = model.UserName; user.FullName = model.FullName; user.PhoneNumber = model.PhoneNumber; user.IsActive = model.IsActive; user.UpdatedOn = DateTime.Now; user.AdminRemark = model.AdminRemark; AddOrDeleteRoles(model, user); var result = await _userManager.UpdateAsync(user); if (!result.Succeeded) { return(Result.Fail(result.Errors.FirstOrDefault()?.Description)); } if (!string.IsNullOrWhiteSpace(model.Password)) { model.Password = model.Password.Trim(); if (model.Password.Length < 6 || model.Password.Length > 32) { throw new Exception("密码长度6-32字符"); } var code = await _userManager.GeneratePasswordResetTokenAsync(user); result = await _userManager.ResetPasswordAsync(user, code, model.Password.Trim()); } if (!result.Succeeded) { return(Result.Fail(result.Errors.FirstOrDefault()?.Description)); } _tokenService.RemoveUserToken(user.Id); return(Result.Ok()); }