Code-review popravke: RequireDozvola middleware, validacija backupa, dedup partiala

Bezbednost / dozvole:
  - Nov RequireDozvola(proveri, akcija) middleware (po uzoru na RequireAdmin):
    na odbijanje redirekt na /dashboard sa flash porukom umesto golog 403
  - 10 "pregled" ruta (prodaja, servis, klijenti, dobavljači, nabavke) prešlo
    na deklarativnu proveru na nivou rute
  - Uklonjene inline pregled-provere iz handlera — provera je sad na jednom
    mestu po ruti, vidljiva u ruteru

  Backup podešavanja:
  - Neispravan unos (van opsega ili ne-broj) više se ne preskače tiho;
    prikazuje se jasna greška i ne prikazuje se lažno "sačuvano"
  - Hvata se greška pri čuvanju u bazu (uklonjen progutani _ =)

  Šabloni:
  - "Premesti" dropdown izvučen u jedan {{define "premestiMeni"}} partial
    (više nije dupliran u tabeli i mobilnoj kartici)
  - Dodat dict helper u FuncMap saSidebar šablona radi prosleđivanja više
    vrednosti partialu; standalone šabloni namerno ostaju bez izmene
This commit is contained in:
2026-06-09 01:26:10 +02:00
parent 53432c8c41
commit cf13d0fe15
10 changed files with 93 additions and 95 deletions
+10 -10
View File
@@ -190,40 +190,40 @@ func main() {
r.Get("/magacin/kategorije", h.Kategorije)
r.Post("/magacin/kategorije/dodaj", h.DodajKategoriju)
r.Get("/magacin/kategorije/obrisi/{id}", h.ObrisiKategoriju)
r.Get("/nabavke", h.Nabavke)
r.Get("/nabavke/nova", h.NovaNabavka)
r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "nabavka.pregled")).Get("/nabavke", h.Nabavke)
r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "nabavka.pregled")).Get("/nabavke/nova", h.NovaNabavka)
r.Post("/nabavke/nova", h.SacuvajNabavku)
r.Get("/nabavke/{id}", h.DetaljiNabavke)
r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "nabavka.pregled")).Get("/nabavke/{id}", h.DetaljiNabavke)
r.Post("/nabavke/obrisi/{id}", h.ObrisiNabavku)
r.Get("/dobavljaci", h.Dobavljaci)
r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "dobavljac.pregled")).Get("/dobavljaci", h.Dobavljaci)
r.Get("/dobavljaci/novi", h.NoviDobavljac)
r.Post("/dobavljaci/novi", h.SacuvajDobavljaca)
r.Get("/dobavljaci/izmeni/{id}", h.IzmeniDobavljaca)
r.Post("/dobavljaci/izmeni/{id}", h.SacuvajIzmeneDobavljaca)
r.Post("/dobavljaci/obrisi/{id}", h.ObrisiDobavljaca)
r.Get("/klijenti", h.Klijenti)
r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "klijent.pregled")).Get("/klijenti", h.Klijenti)
r.Get("/klijenti/novi", h.NoviKlijent)
r.Post("/klijenti/novi", h.SacuvajKlijenta)
r.Get("/klijenti/izmeni/{id}", h.IzmeniKlijenta)
r.Post("/klijenti/izmeni/{id}", h.SacuvajIzmenuKlijenta)
r.Post("/klijenti/obrisi/{id}", h.ObrisiKlijenta)
r.Get("/servis", h.Servis)
r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "servis.pregled")).Get("/servis", h.Servis)
r.Get("/servis/novi", h.NoviNalog)
r.Post("/servis/novi", h.SacuvajNalog)
r.Get("/servis/izmeni/{id}", h.IzmeniNalog)
r.Post("/servis/izmeni/{id}", h.SacuvajIzmenaNaloga)
r.Post("/servis/obrisi/{id}", h.ObrisiNalog)
r.Get("/servis/{id}", h.DetaljiNaloga)
r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "servis.pregled")).Get("/servis/{id}", h.DetaljiNaloga)
r.Post("/servis/{id}/delovi", h.DodajDeloNalogu)
r.Post("/servis/{id}/delovi/{deo_id}/obrisi", h.ObrisiDeloNaloga)
r.Get("/izvestaji", h.Izvestaji)
r.Get("/prodaja", h.Prodaja)
r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "prodaja.pregled")).Get("/prodaja", h.Prodaja)
r.Get("/prodaja/nova", h.NovaProdaja)
r.Post("/prodaja/nova", h.SacuvajProdaju)
r.Post("/prodaja/obrisi/{id}", h.ObrisiProdaju)
r.Post("/prodaja/storno/{id}", h.StornoProdaje)
r.Get("/prodaja/{id}/stampa", h.StampaProdaje)
r.Get("/prodaja/{id}", h.DetaljiProdaje)
r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "prodaja.pregled")).Get("/prodaja/{id}/stampa", h.StampaProdaje)
r.With(ntechmw.RequireDozvola(h.DozvoleRepo.ImaDozvolu, "prodaja.pregled")).Get("/prodaja/{id}", h.DetaljiProdaje)
// podsetnici
r.Get("/podsetnici", h.Podsetnici)