Magacin premeštanje, backup podešavanja, čišćenje RBAC sistema

Magacin:
  - Dodato premeštanje artikla u drugu kategoriju (dugme + nativni
    <details> meni, bez JS-a; radi na desktopu i mobilnom)
  - Endpoint POST /magacin/premesti/{id} uz proveru dozvole artikal.premesti

  Backup:
  - Nova podešavanja: interval automatskog backupa i broj kopija (rotacija)
  - Periodični backup uz onaj pri pokretanju; interval se čita iz baze
  - Migracija 037_backup_podesavanja.sql

  Dozvole (RBAC):
  - Dodate kartice koje su nedostajale (dashboard.prihod, prodaja.storno,
    podesavanja.login_pozadina, tema.lokalno) — popravljen i bug gde su se
    gasile pri svakom čuvanju matrice
  - Aktivirana kontrola pregleda za prodaju, servis, klijente i dobavljače
    (provera u handlerima + skrivanje iz sidebara)
  - Uklonjene mrtve/obmanjujuće dozvole iz matrice i sveAkcije (korisnici,
    podsetnici, artikal.pregled, kategorija.izmeni, tema.globalno,
    podesavanja.app_pozadina); sveAkcije 47 -> 34
  - Čišćenje zastarelih redova (siročića) u tabeli dozvola pri startu

  Ostalo:
  - Statički fajlovi: embed celog web/static i ispravan MIME za .js/.css
  - Keš šablona: dodat admin_dozvole (stranica Dozvole se nije otvarala)
  - Sidebar accordion: radi i skupljen i proširen, međusobno isključiv
This commit is contained in:
2026-06-09 00:55:15 +02:00
parent a99920d102
commit 53432c8c41
20 changed files with 317 additions and 155 deletions
+11 -38
View File
@@ -1,15 +1,15 @@
package middleware
// sve poznate akcije u sistemu
// Napomena: pregled magacina i podsetnici su namerno javni (bez dozvole) i nisu ovde.
// Upravljanje korisnicima ide preko uloge (RequireAdmin middleware), ne preko dozvole.
var sveAkcije = []string{
"artikal.pregled",
"artikal.dodaj",
"artikal.izmeni",
"artikal.obrisi",
"artikal.premesti",
"kategorija.pregled",
"kategorija.dodaj",
"kategorija.izmeni",
"kategorija.obrisi",
"nabavka.pregled",
"nabavka.dodaj",
@@ -25,30 +25,19 @@ var sveAkcije = []string{
"prodaja.pregled",
"prodaja.dodaj",
"prodaja.obrisi",
"prodaja.storno",
"klijent.pregled",
"klijent.dodaj",
"klijent.izmeni",
"klijent.obrisi",
"podsetnik.pregled",
"podsetnik.dodaj",
"podsetnik.izmeni",
"podsetnik.obrisi",
"izvestaj.pregled",
"podesavanja.pregled",
"podesavanja.izmeni",
"korisnik.pregled",
"korisnik.dodaj",
"korisnik.izmeni",
"korisnik.obrisi",
"korisnik.uloga",
"podesavanja.login_pozadina",
"backup.pregled",
"backup.pokreni",
"podesavanja.login_pozadina",
"podesavanja.app_pozadina",
"tema.globalno",
"tema.lokalno",
"dashboard.prihod",
"prodaja.storno",
}
// SveAkcije vraća listu svih poznatih akcija — koristi se pri inicijalizaciji baze i resetu
@@ -65,13 +54,12 @@ func ImaDozvolu(uloga, akcija string) bool {
case "admin":
switch akcija {
// artikal
case "artikal.pregled", "artikal.dodaj", "artikal.izmeni",
// artikal (pregled magacina je javan — nije dozvola)
case "artikal.dodaj", "artikal.izmeni",
"artikal.obrisi", "artikal.premesti":
return true
// kategorija
case "kategorija.pregled", "kategorija.dodaj",
"kategorija.izmeni", "kategorija.obrisi":
case "kategorija.pregled", "kategorija.dodaj", "kategorija.obrisi":
return true
// nabavka
case "nabavka.pregled", "nabavka.dodaj", "nabavka.obrisi":
@@ -91,26 +79,18 @@ func ImaDozvolu(uloga, akcija string) bool {
case "klijent.pregled", "klijent.dodaj",
"klijent.izmeni", "klijent.obrisi":
return true
// podsetnik
case "podsetnik.pregled", "podsetnik.dodaj",
"podsetnik.izmeni", "podsetnik.obrisi":
return true
// izveštaji i podešavanja
case "izvestaj.pregled",
"podesavanja.pregled", "podesavanja.izmeni":
return true
// korisnici (bez promene uloge)
case "korisnik.pregled", "korisnik.dodaj",
"korisnik.izmeni", "korisnik.obrisi":
return true
// backup
case "backup.pregled", "backup.pokreni":
return true
// pozadinske slike
case "podesavanja.login_pozadina", "podesavanja.app_pozadina":
// pozadina prijavne stranice
case "podesavanja.login_pozadina":
return true
// teme
case "tema.globalno", "tema.lokalno":
// lokalna tema
case "tema.lokalno":
return true
// dashboard — prihod samo admin+
case "dashboard.prihod":
@@ -120,9 +100,6 @@ func ImaDozvolu(uloga, akcija string) bool {
case "radnik":
switch akcija {
// artikal — samo pregled
case "artikal.pregled":
return true
// kategorija — samo pregled
case "kategorija.pregled":
return true
@@ -138,10 +115,6 @@ func ImaDozvolu(uloga, akcija string) bool {
// klijent — bez brisanja
case "klijent.pregled", "klijent.dodaj", "klijent.izmeni":
return true
// podsetnik — sve
case "podsetnik.pregled", "podsetnik.dodaj",
"podsetnik.izmeni", "podsetnik.obrisi":
return true
// lokalna tema
case "tema.lokalno":
return true