Beispiel #1
0
        public async Task <IHttpActionResult> Update(ShqUserRequestViewModel shqUserView)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Not a valid model"));
            }

            if (HttpContext.Current.User.Identity.Name != shqUserView.EmailAddress &&
                HttpContext.Current.User.IsInRole(ShqConstants.AdministratorRole) == false)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Access"));
            }

            ShqUser shqUser = await db.ShqUsers.Where(item => item.IdentityUser.Email == shqUserView.EmailAddress).Include("IdentityUser").FirstOrDefaultAsync();

            if (shqUser == null)
            {
                return(NotFound());
            }
            else
            {
                shqUser.Address     = shqUserView.Address;
                shqUser.Description = shqUserView.Description;
                //shqUser.EmailAddress = shqUserView.EmailAddress;
                shqUser.Status                   = shqUserView.Status;
                shqUser.PhoneNumber              = shqUserView.PhoneNumber;
                shqUser.RealName                 = shqUserView.RealName;
                shqUser.Gender                   = shqUserView.Gender;
                shqUser.JobLevel                 = shqUserView.JobLevel;
                shqUser.Department               = shqUserView.Department;
                shqUser.IdentityUser.Email       = shqUserView.EmailAddress;
                shqUser.IdentityUser.PhoneNumber = shqUserView.PhoneNumber;

                shqUser.LastModifiedById = db.ShqUsers.Where(u => u.IdentityUser.UserName == System.Web.HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId;
                shqUser.LastModfiedTime  = DateTime.Now;
                //var store = new ShqUserStore();
                //await store.SetPasswordHashAsync(shqUser.IdentityUser, new ShqUserManager().PasswordHasher.HashPassword(shqUserView.Password));

                await db.SaveChangesAsync();
            }

            (new AuditsController()).AddAuditEntry("api/ShqUsers/Update", shqUser.EmailAddress);
            return(Ok(new ShqUserRespondViewModel(shqUser, db)));
        }
        public async Task <IHttpActionResult> Add(ShqUserRequestViewModel shqUserView)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (string.IsNullOrEmpty(shqUserView.Password) == true)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.PreconditionFailed, "Password is invalide"));
            }

            if (shqUserView.Roles == null || shqUserView.Roles.Count < 1)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.PreconditionFailed, "User role not specified"));
            }

            if (db.Users.Where(u => u.UserName.ToLower() == shqUserView.EmailAddress.ToLower()).FirstOrDefault() != null)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.PreconditionFailed, "Name is duiplicated"));
            }

            var user = db.Users.Add(new IdentityUser(shqUserView.EmailAddress)
            {
                Email = shqUserView.EmailAddress, EmailConfirmed = true
            });

            foreach (var role in shqUserView.Roles)
            {
                string roleid = db.Roles.First(c => c.Name == role).Id;
                user.Roles.Add(new IdentityUserRole {
                    RoleId = roleid
                });
            }

            var shqUser = shqUserView.ToShqUser();

            shqUser.IdentityUserId   = user.Id;
            shqUser.IdentityUser     = user;
            shqUser.CreatedById      = db.ShqUsers.Where(u => u.IdentityUser.UserName == System.Web.HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId;
            shqUser.LastModifiedById = shqUser.CreatedById;
            db.ShqUsers.Add(shqUser);

            var store = new ShqUserStore();
            await store.SetPasswordHashAsync(user, new ShqUserManager().PasswordHasher.HashPassword(shqUserView.Password));

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (ShqUserExists(shqUser.IdentityUserId))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            return(Ok(new ShqUserRespondViewModel(shqUser, db)));
        }