public async Task <Tuple <bool, string[]> > CreateUserAsync(UserDTO user, IEnumerable <string> roles, string password) { ObjectMapper mapper = new ObjectMapper(); ApplicationUser appUser = mapper.ConvertUserToIdentityUser(user); try { var result = await _appUserManager.CreateAsync(appUser, password); if (!result.Succeeded) { return(Tuple.Create(false, result.Errors.ToArray())); } appUser = await _appUserManager.FindByNameAsync(appUser.UserName); try { if (roles != null) { result = await _appUserManager.AddToRolesAsync(appUser.Id, roles.ToArray()); } if (appUser != null) { _appUserManager.SetLockoutEnabled(appUser.Id, true); } } catch { await DeleteUserAsync(appUser); throw; } if (!result.Succeeded) { await DeleteUserAsync(appUser); return(Tuple.Create(false, result.Errors.ToArray())); } } catch (Exception ex) { throw ex; } return(Tuple.Create(true, new string[] { appUser.Id })); }
public async Task <Tuple <bool, string[]> > UpdateUserAsync(UserDTO user, IEnumerable <string> roles) { ObjectMapper mapper = new ObjectMapper(); ApplicationUser appUser = mapper.ConvertUserToIdentityUser(user); var result = await _appUserManager.UpdateAsync(appUser); if (!result.Succeeded) { return(Tuple.Create(false, result.Errors.ToArray())); } if (roles != null) { var userRoles = await _appUserManager.GetRolesAsync(user.Id); var rolesToRemove = userRoles.Except(roles).ToArray(); var rolesToAdd = roles.Except(userRoles).Distinct().ToArray(); if (rolesToRemove.Any()) { result = await _appUserManager.RemoveFromRolesAsync(user.Id, rolesToRemove); if (!result.Succeeded) { return(Tuple.Create(false, result.Errors.ToArray())); } } if (rolesToAdd.Any()) { result = await _appUserManager.AddToRolesAsync(user.Id, rolesToAdd); if (!result.Succeeded) { return(Tuple.Create(false, result.Errors.ToArray())); } } } return(Tuple.Create(true, new string[] { })); }