public async Task <IActionResult> Update(string id, UpdateMemberModel model) { var entity = _service.Members.Id(id).FirstOrDefault(); if (entity == null) { return(NotFound(AppResult.NotFound())); } var validationData = _service.ValidateUpdateMember(User, entity, model); if (!validationData.IsValid) { return(BadRequest(AppResult.FailValidation(data: validationData))); } using (var transaction = context.Database.BeginTransaction()) { var user = entity.User; _service.UpdateMember(entity, model); user = _identityService.UpdateUser(user, model); if (model.UpdateDepartmentMembers.Any(o => o.IsManager == true) || model.UpdateAreaMembers.Any(o => o.IsManager == true)) { model.Roles = model.Roles ?? new HashSet <string>(); model.Roles.Add(RoleName.MANAGER); } var result = await _identityService.UpdateUserAsync(user); if (result.Succeeded && model.Roles != null && model.Roles.Count() > 0) { var oldRoles = await _identityService.GetRolesOfUserAsync(user); result = await _identityService.RemoveUserFromRolesAsync(user, oldRoles); if (result.Succeeded) { result = await _identityService.AddRolesForUserAsync(user, model.Roles); } } if (!result.Succeeded) { foreach (var err in result.Errors) { ModelState.AddModelError(err.Code, err.Description); } var builder = ResultHelper.MakeInvalidAccountRegistrationResults(ModelState); return(BadRequest(builder)); } _logger.CustomProperties(User).Info("Update user"); //log event var ev = _sysService.GetEventForUpdateUser( $"Admin has updated a user information", UserId); _sysService.CreateAppEvent(ev); //end log event context.SaveChanges(); transaction.Commit(); } return(NoContent()); }
public async Task <IActionResult> AddRole(AddRolesToUserModel model) { var entity = await _service.GetUserByUserNameAsync(model.username); if (entity == null) { return(NotFound(AppResult.NotFound())); } var result = await _service.AddRolesForUserAsync(entity, model.roles); if (result.Succeeded) { return(NoContent()); } foreach (var err in result.Errors) { ModelState.AddModelError(err.Code, err.Description); } return(BadRequest(AppResult.FailValidation(ModelState))); }