Exemplo n.º 1
0
        public static EditUserViewModel ToServiceModel(this SaveUserModel model)
        {
            var serviceModel = new EditUserViewModel
                    {
                        Version = model.Version,
                        FirstName = model.FirstName,
                        LastName = model.LastName,
                        UserName = model.UserName,
                        Email = model.Email,
                        Image = { ImageId = model.ImageId },
                        Password = model.Password,
                        Roles = model.Roles
                    };

            return serviceModel;
        }
Exemplo n.º 2
0
        public ActionResult SaveUser(EditUserViewModel model)
        {
            if (ModelState.IsValid)
            {
                var response = GetCommand<SaveUserCommand>().ExecuteCommand(model);
                if (response != null)
                {
                    if (model.Id.HasDefaultValue())
                    {
                        Messages.AddSuccess(UsersGlobalization.SaveUser_CreatedSuccessfully_Message);
                    }
                    return WireJson(true, response);
                }
            }

            return WireJson(false);
        }
Exemplo n.º 3
0
        private List<Role> SaveUserRoles(User user, EditUserViewModel request, bool createIfNotExists)
        {
            var dbRoles = user.UserRoles ?? new List<UserRole>();
            var requestRoles = request.Roles ?? new List<string>();
            var createdRoles = new List<Role>();

            // Delete removed roles
            dbRoles
                .Where(dbRole => requestRoles.All(requestRole => requestRole != dbRole.Role.Name))
                .ToList()
                .ForEach(del => repository.Delete(del));

            // Insert new roles
            var rolesToInsert = requestRoles
                .Where(requestRole => dbRoles.All(dbRole => requestRole != dbRole.Role.Name))
                .ToList();

            if (rolesToInsert.Count > 0)
            {
                var roles = repository
                    .AsQueryable<Role>(role => rolesToInsert.Contains(role.Name))
                    .ToList();

                if (createIfNotExists)
                {
                    foreach (var roleName in rolesToInsert.Where(rr => roles.All(r => r.Name != rr)).ToList())
                    {
                        var role = new Role { Name = roleName };
                        createdRoles.Add(role);
                        roles.Add(role);

                        repository.Save(role);
                    }
                }

                rolesToInsert.ForEach(roleName =>
                        repository.Save(new UserRole
                            {
                                User = user,
                                Role = roles.Where(role => role.Name == roleName).FirstOne()
                            }));
            }

            return createdRoles;
        }
Exemplo n.º 4
0
        private void ValidateUser(EditUserViewModel model)
        {
            var userName = model.UserName.Trim();
            var existIngId = repository
                .AsQueryable<User>(c => c.UserName == userName && c.Id != model.Id)
                .Select(r => r.Id)
                .FirstOrDefault();

            if (!existIngId.HasDefaultValue())
            {
                var message = string.Format(UsersGlobalization.SaveUse_UserNameExists_Message, model.UserName);
                var logMessage = string.Format("Failed to update user profile. User Name already exists. User Name: {0}, User Email: {1}, Id: {2}", model.UserName, model.Email, model.Id);

                throw new ValidationException(() => message, logMessage);
            }

            var email = model.Email.Trim();
            existIngId = repository
                .AsQueryable<User>(c => c.Email == email && c.Id != model.Id)
                .Select(r => r.Id)
                .FirstOrDefault();

            if (!existIngId.HasDefaultValue())
            {
                var message = string.Format(UsersGlobalization.SaveUse_UserEmailExists_Message, model.Email);
                var logMessage = string.Format("Failed to update user profile. User Email already exists. User Name: {0}, User Email: {1}, Id: {2}", model.UserName, model.Email, model.Id);

                throw new ValidationException(() => message, logMessage);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Saves the user.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="treatNullsAsLists">if set to <c>true</c> treat null lists as empty lists.</param>
        /// <param name="createIfNotExists">if set to <c>true</c> create if not exists.</param>
        /// <returns>
        /// Saved user entity
        /// </returns>
        public User SaveUser(EditUserViewModel model, bool treatNullsAsLists = true, bool createIfNotExists = false)
        {
            ValidateUser(model);

            User user = null;
            var isNew = model.Id.HasDefaultValue();
            if (!isNew)
            {
                user = repository
                    .AsQueryable<User>()
                    .Where(u => u.Id == model.Id)
                    .FetchMany(u => u.UserRoles)
                    .ThenFetch(ur => ur.Role)
                    .ToList()
                    .FirstOrDefault();
                isNew = user == null;

                if (isNew & !createIfNotExists)
                {
                    throw new EntityNotFoundException(typeof(User), model.Id);
                }
            }

            if (isNew)
            {
                user = new User { Id = model.Id };

                if (string.IsNullOrWhiteSpace(model.Password))
                {
                    var message = UsersGlobalization.CreateUser_Password_IsRequired;
                    var logMessage = string.Format("{0}, UserName: {1}, Email: {2}", message, model.UserName, model.Email);
                    throw new ValidationException(() => message, logMessage);
                }
            }

            unitOfWork.BeginTransaction();

            if (model.Version > 0)
            {
                user.Version = model.Version;
            }
            user.UserName = model.UserName;
            user.FirstName = model.FirstName;
            user.LastName = model.LastName;
            user.Email = model.Email;

            if (!string.IsNullOrWhiteSpace(model.Password))
            {
                var salt = authenticationService.GeneratePasswordSalt();
                user.Password = authenticationService.CreatePasswordHash(model.Password, salt);
                user.Salt = salt;
            }

            if (model.Image != null && model.Image.ImageId.HasValue)
            {
                user.Image = repository.AsProxy<MediaImage>(model.Image.ImageId.Value);
            }
            else
            {
                user.Image = null;
            }

            // Set null list as empty
            if (treatNullsAsLists)
            {
                model.Roles = model.Roles ?? new string[0];
            }

            List<Role> createdRoles = null;
            if (model.Roles != null)
            {
                createdRoles = SaveUserRoles(user, model, createIfNotExists);
            }

            repository.Save(user);
            unitOfWork.Commit();

            // Notify.
            if (createdRoles != null)
            {
                createdRoles.ForEach(Events.UserEvents.Instance.OnRoleCreated);
            }

            if (isNew)
            {
                Events.UserEvents.Instance.OnUserCreated(user);
            }
            else
            {
                Events.UserEvents.Instance.OnUserUpdated(user);
            }

            return user;
        }