public async Task <IdentityResult> UpdateUserRoles <TRoleViewModel>(IEditRoleViewModel <TRoleViewModel> model) where TRoleViewModel : IIdentityRoleViewModel { try { var selectedRoles = model.Roles.Where(ir => ir.IsSelected); var unSelectedRoles = model.Roles.Where(ir => !ir.IsSelected); var user = await GetAsync(model.UserId); var userRoles = user.Roles; var rolesToAdd = selectedRoles.Where(r => !userRoles.Select(i => i.RoleId).Contains(r.Id)); var rolesToRemove = unSelectedRoles.Where(r => userRoles.Select(ur => ur.RoleId).Contains(r.Id)); if (rolesToAdd.Any()) { await _userManagerFacade.AddToRolesAsync(model.UserId, rolesToAdd.Select(ir => ir.Name).ToArray()); } if (rolesToRemove.Any()) { await _userManagerFacade.RemoveFromRolesAsync(model.UserId, rolesToRemove.Select(ir => ir.Name).ToArray()); } return(IdentityResult.Success); } catch (Exception ex) { return(new IdentityResult(ex.Message)); } }
public Task <IdentityResult> AddToRolesAsync(string userId, params string[] roles) { return(_userManagerFacade.AddToRolesAsync(userId, roles)); }