public IActionResult Azuriraj(String korisnickoIme, [FromBody] AzurirajKorisnikaRequestModel model) { var result = korisnikService.AzurirajKorisnika(korisnickoIme, model); if (result.IsOk) { logService.Akcija(Core.Constants.LogLevel.Info, Core.Constants.LogKategorija.korisnik, Core.Constants.LogAkcija.korisnik_izmijeni, "KorisnickoIme: " + result.Value.KorisnickoIme, authService.TrenutniKorisnik().UserName ); } return(Convert(result)); }
public ServiceResult <KorisnikModel> AzurirajKorisnika(String korisnickoIme, AzurirajKorisnikaRequestModel model) { var securityLevel = new SecurityLevel(); var korisnik = Secure(context.Korisnici.Include(k => k.KorisnikUloge).AsQueryable(), securityLevel) .SingleOrDefault(k => k.KorisnickoIme == korisnickoIme); /*context.Korisnici.AsQueryable() * .SingleOrDefault(k => k.KorisnickoIme == korisnickoIme);*/ if (korisnik == null) { return(NotFound()); } var trenutni = authService.TrenutniKorisnik(); //za sada je podeseno da može imati jednu ulogu samo var korisnikUlogaId = korisnik.KorisnikUloge.Select(k => k.KorisnikUlogaId).FirstOrDefault(); var korisnikProjektiKorisnika = context.KorisnikProjekti.Where(k => k.KorisnikUlogaId == korisnikUlogaId).ToList(); var vrijednostUAplikaciji = context.Uloge.Where(u => u.Id == model.Uloge[0].VrstaUloge.Id).Select(u => u.VrijednostUAplikaciji).FirstOrDefault(); if (vrijednostUAplikaciji == (int)Uloga.Support) { var kategorije = new List <int>(); foreach (var kat in model.Kategorije) { kategorije.Add(kat.Id); } var kategorijeKorisnika = context.KorisnikKategorije.Include(z => z.ZahtjevKategorija).Where(k => korisnickoIme == k.KorisnickoIme).ToList(); var obrisatiKategorijeKorisnika = context.KorisnikKategorije.Include(z => z.ZahtjevKategorija).Where(k => !kategorije.Contains(k.ZahtjevKategorijaId) && korisnickoIme == k.KorisnickoIme).Distinct(); var dodatiKategorijeKorisnika = kategorije.Where(p => !kategorijeKorisnika.Any(a => a.ZahtjevKategorijaId == p)).ToList(); context.KorisnikKategorije.RemoveRange(obrisatiKategorijeKorisnika); context.KorisnikKategorije.AddRange(dodatiKategorijeKorisnika.Select(n => new KorisnikKategorija { KorisnickoIme = korisnickoIme, ZahtjevKategorijaId = n })); var noviProjekti = context.ZahtjevKategorije.Where(z => kategorije.Contains(z.Id)).Select(z => z.DioProjekta.ProjekatId).Distinct(); var obrisatiProjekte = korisnikProjektiKorisnika.Where(p => !noviProjekti.Any(a => a == p.ProjekatId)).ToList(); var dodatiProjekte = noviProjekti.Where(p => !korisnikProjektiKorisnika.Any(a => a.ProjekatId == p)).ToList(); context.KorisnikProjekti.RemoveRange(obrisatiProjekte); context.KorisnikProjekti.AddRange(dodatiProjekte.Select(n => new KorisnikProjekat { ProjekatId = n, KorisnikUlogaId = korisnikUlogaId })); } else { var obrisatiKorisnikProjekte = korisnikProjektiKorisnika.Where(p => !model.Projekti.Any(a => a.Id == p.ProjekatId)).ToList(); var dodatiKorisnikProjekte = model.Projekti.Where(p => !korisnikProjektiKorisnika.Any(a => a.ProjekatId == p.Id)).ToList(); context.KorisnikProjekti.RemoveRange(obrisatiKorisnikProjekte); context.KorisnikProjekti.AddRange(dodatiKorisnikProjekte.Select(n => new KorisnikProjekat { ProjekatId = n.Id, KorisnikUlogaId = korisnikUlogaId })); } // Provjeriti pravo dodavanja uloge var dozvoljeneUloge = pravoUpravljanjaKorisnikomService.VratiPravaUpravljanjaKorisnikom(trenutni.TrenutnaUlogaId); if (model.Uloge.Any(a => dozvoljeneUloge.All(doz => doz.UlogaUpravljanogId != a.VrstaUloge.Id))) { return(Error("Nemate prava izmjene korisnika sa tim ulogama")); } var stareUloge = context.KorisnikUloge .Where(a => a.KorisnickoIme == korisnickoIme).ToList(); // Koristi se transakcija zato sto se brisu uloge pa se onda ponovo dodaju using (var transaction = context.Database.BeginTransaction()) { try { // Obirisi uloge i dodatne informacije /*foreach (var uloga in stareUloge) * { * context.KorisnikUloge.Remove(uloga); * } * context.KorisnikUloge.RemoveRange(stareUloge); * * context.SaveChanges(); * * foreach (var novaUloga in model.Uloge) * { * var nova = new KorisnikUloga * { * UlogaId = novaUloga.VrstaUloge.Id, * KorisnickoIme = korisnickoIme * // KorisnikUlogaDodatnaInformacija = new List<KorisnikUlogaDodatnaInformacija>() * }; * * context.KorisnikUloge.Add(nova); * }*/ // postavi vrijednosti korisnik.Email = model.Email; korisnik.PunoIme = model.PunoIme; SaveChanges(context); if (!string.IsNullOrEmpty(model.Lozinka) && model.Lozinka.Length >= 6) { PostaviLozinku(korisnickoIme, model.Lozinka); } transaction.Commit(); } catch (Exception e) { return(Error("Greška", false)); } } // vrati azuriranog korisnika return(VratiKorisnikaPoKorisnickomImenu(korisnickoIme)); }
public ServiceResult <KorisnikModel> AzurirajKorisnika(String korisnickoIme, AzurirajKorisnikaRequestModel model) { var securityLevel = new SecurityLevel(); // dobavi razred ako postoji var korisnik = Secure(context.Users.AsQueryable(), securityLevel) .SingleOrDefault(k => k.UserName == korisnickoIme); if (korisnik == null) { return(NotFound()); } var trenutni = authService.TrenutniKorisnik(); // Provjeriti pravo dodavanja uloge var dozvoljeneUloge = pravoUpravljanjaKorisnikomService.VratiPravaUpravljanjaKorisnikom(trenutni.TrenutnaUlogaId); if (model.Uloge.Any(a => dozvoljeneUloge.All(doz => doz.UlogaUpravljanogId != a.VrstaUlogeId))) { return(Error("Nemate prava izmjene korisnika sa tim ulogama")); } var stareUloge = context.UserRoles .Include(x => x.KorisnikUlogaDodatnaInformacija) .Where(a => a.UserId == korisnik.Id).ToList(); // Koristi se transakcija zato sto se brisu uloge pa se onda ponovo dodaju using (var transaction = context.Database.BeginTransaction()) { try { // Obirisi uloge i dodatne informacije foreach (var uloga in stareUloge) { context.KorisnikUlogaDodatneInformacije.RemoveRange(uloga.KorisnikUlogaDodatnaInformacija); } context.UserRoles.RemoveRange(stareUloge); context.SaveChanges(); foreach (var novaUloga in model.Uloge) { var nova = new KorisnikUloga { RoleId = novaUloga.VrstaUlogeId, UserId = korisnik.Id, KorisnikUlogaDodatnaInformacija = new List <KorisnikUlogaDodatnaInformacija>() }; context.UserRoles.Add(nova); } // postavi vrijednosti korisnik.Email = model.Email; korisnik.PunoIme = model.PunoIme; SaveChanges(context); if (!string.IsNullOrEmpty(model.Lozinka) && model.Lozinka.Length >= 6) { PostaviLozinku(korisnickoIme, model.Lozinka); } transaction.Commit(); } catch (Exception) { return(Error("Greška", false)); } } // vrati azuriranog korisnika return(VratiKorisnikaPoKorisnickomImenu(korisnickoIme)); }