public async Task <IActionResult> ChangePassword(ChangePasswordModel model)
        {
            if (ModelState.IsValid)
            {
                if (!model.Name.Equals(User.Identity.Name))
                {
                    ModelState.AddModelError("", "Доступ запрещён."); //попытка изменить пароль другому пользователю пресекается.
                    return(View(model));
                }

                User user = await db.Users.FirstOrDefaultAsync(u => u.Name == model.Name);

                if (user != null)
                {
                    if (user.Password == PasswordService.GetPasswordHash(model.OldPassword))
                    {
                        //меняем пароль пользователя на новый
                        user.Password        = PasswordService.GetPasswordHash(model.NewPassword);
                        db.Entry(user).State = EntityState.Modified;
                        await db.SaveChangesAsync();

                        return(RedirectToAction("Index", "Home"));
                    }
                    else
                    {
                        ModelState.AddModelError("", "Старый пароль введён неверно.");
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Пользователь не найден.");
                }
            }
            return(View(model));
        }
        public IHttpActionResult PutUser(int id, User user)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != user.Id)
            {
                return(BadRequest());
            }

            db.Entry(user).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!UserExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
        public IActionResult PutUser(int id, [FromBody] User user)
        {
            //Пользователь в роли "user" может редактировать только самого себя и не может других пользователей.
            if (User.IsInRole("user") && !User.Identity.Name.Equals(user.Name))
            {
                return(StatusCode(StatusCodes.Status403Forbidden));
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != user.Id)
            {
                return(BadRequest());
            }

            db.Entry(user).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!UserExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(StatusCodes.Status204NoContent));
        }