private IEnumerable <Models.BookModel> GetBookList(int userId, string bookName, bool full) { using (BookDb.BookDbContext db = new BookDb.BookDbContext()) { if (full) { return(db.Book.Where(x => bookName == null ? true : x.Name.ToLower().Contains(bookName.ToLower())) .Select(x => new Models.BookModel { bookId = x.Id, lnkId = x.LnkUserBook.Any(y => y.UserId == userId)? -1: (int?)null, bookName = x.Name }).ToArray()); } else { return(db.LnkUserBook.Where(x => x.UserId == userId) .Select(x => new Models.BookModel { bookId = x.BookId, lnkId = x.Id, bookName = x.Book.Name }).Where(x => bookName == null? true: x.bookName.ToLower().Contains(bookName.ToLower())) .ToArray()); } } }
public void RemoveBook(Models.BookModel search) { var id = HttpContext.User.FindFirst("id"); if (id == null) { throw new Exceptions.AuthorizationException("Ошибка аутентификации, отсутствуют дополнительные параметры пользователя"); } using (BookDb.BookDbContext db = new BookDb.BookDbContext()) { using (var scope = db.Database.BeginTransaction()) { var lnk = db.LnkUserBook.Find(search.lnkId.Value); if (lnk == null) { throw new Exceptions.GeneralException("Связка не найдена"); } db.LnkUserBook.Remove(lnk); db.SaveChanges(); scope.Commit(); } } }
public IActionResult LogIn(Models.LoginModel user) { if (user == null) { throw new Exceptions.GeneralException("Модель аутентификации отсутствует"); } using (BookDb.BookDbContext db = new BookDb.BookDbContext()) { BookDb.User dbUser = db.User.FirstOrDefault(x => x.Login == user.UserName && x.Password == user.Password); if (dbUser == null) { throw new Exceptions.AuthorizationException("Указаны неверный логин или пароль"); } else { //аутентификация прошла успешно //составляем, некоторый список параметров аутентифицированного пользователя var claims = new List <Claim> { new Claim(ClaimsIdentity.DefaultNameClaimType, dbUser.Login), new Claim("id", dbUser.Id.ToString()) }; //генерим токен var secretKey = AuthOptions.SecretKey; var signinCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256); var tokeOptions = new JwtSecurityToken( issuer: AuthOptions.ISSUER, audience: AuthOptions.AUDIENCE, claims: claims, notBefore: DateTime.Now, expires: DateTime.Now.AddMinutes(AuthOptions.LIFETIME), signingCredentials: signinCredentials ); var tokenString = new JwtSecurityTokenHandler().WriteToken(tokeOptions); //добавляем токен в куки, он не видим клиентом HttpContext.Response.Cookies.Append(AuthOptions.TOKENCOOKIE, tokenString, new CookieOptions { HttpOnly = true, MaxAge = TimeSpan.FromMinutes(AuthOptions.LIFETIME) }); //добавляем флаг прохождения аутентификации, с которым клиент сверяется HttpContext.Response.Cookies.Append(AuthOptions.TESTCOOKIE, "true", new CookieOptions { HttpOnly = false, MaxAge = TimeSpan.FromMinutes(AuthOptions.LIFETIME) }); return(Ok()); } } }
public void AddBook(Models.BookModel search) { var id = HttpContext.User.FindFirst("id"); if (id == null) { throw new Exceptions.AuthorizationException("Ошибка аутентификации, отсутствуют дополнительные параметры пользователя"); } using (BookDb.BookDbContext db = new BookDb.BookDbContext()) { using (var scope = db.Database.BeginTransaction()) { var lnk = new BookDb.LnkUserBook(); lnk.BookId = search.bookId.Value; lnk.UserId = int.Parse(id.Value); db.LnkUserBook.Add(lnk); db.SaveChanges(); scope.Commit(); } } }
public IActionResult Registry(Models.RegistryModel model) { using (BookDb.BookDbContext db = new BookDb.BookDbContext()) { if (db.User.Any(x => x.Login == model.UserName)) { throw new Exceptions.GeneralException("Пользователь с указанным логином уже имеется"); } using (IDbContextTransaction trans = db.Database.BeginTransaction()) { var user = new BookDb.User(); user.Login = model.UserName; user.Password = model.Password; db.User.Add(user); db.SaveChanges(); trans.Commit(); } } return(Ok()); }