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());
        }
Example #2
0
        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)));
        }