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
+22 -64
View File
@@ -40,14 +40,17 @@
</thead>
<tbody>
<!-- Magacin -->
<tr class="matrica-modul"><td {{if eq .KorisnikUloga "superadmin"}}colspan="3"{{else}}colspan="2"{{end}}>Magacin</td></tr>
<!-- Dashboard -->
<tr class="matrica-modul"><td {{if eq .KorisnikUloga "superadmin"}}colspan="3"{{else}}colspan="2"{{end}}>Dashboard</td></tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Pregled artikala</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__artikal.pregled" {{if index .DozvoleRadnik "artikal.pregled"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__artikal.pregled" {{if index .DozvoleAdmin "artikal.pregled"}}checked{{end}}></td>{{end}}
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Prikaz prihoda</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__dashboard.prihod" {{if index .DozvoleRadnik "dashboard.prihod"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__dashboard.prihod" {{if index .DozvoleAdmin "dashboard.prihod"}}checked{{end}}></td>{{end}}
</tr>
<!-- Magacin -->
<tr class="matrica-modul"><td {{if eq .KorisnikUloga "superadmin"}}colspan="3"{{else}}colspan="2"{{end}}>Magacin</td></tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Dodavanje artikala</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__artikal.dodaj" {{if index .DozvoleRadnik "artikal.dodaj"}}checked{{end}}></td>
@@ -86,12 +89,6 @@
<td class="matrica-checkbox"><input type="checkbox" name="radnik__kategorija.dodaj" {{if index .DozvoleRadnik "kategorija.dodaj"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__kategorija.dodaj" {{if index .DozvoleAdmin "kategorija.dodaj"}}checked{{end}}></td>{{end}}
</tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Izmena kategorija</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__kategorija.izmeni" {{if index .DozvoleRadnik "kategorija.izmeni"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__kategorija.izmeni" {{if index .DozvoleAdmin "kategorija.izmeni"}}checked{{end}}></td>{{end}}
</tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Brisanje kategorija</td>
@@ -194,6 +191,12 @@
<td class="matrica-checkbox"><input type="checkbox" name="radnik__prodaja.obrisi" {{if index .DozvoleRadnik "prodaja.obrisi"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__prodaja.obrisi" {{if index .DozvoleAdmin "prodaja.obrisi"}}checked{{end}}></td>{{end}}
</tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Storniranje prodaje</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__prodaja.storno" {{if index .DozvoleRadnik "prodaja.storno"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__prodaja.storno" {{if index .DozvoleAdmin "prodaja.storno"}}checked{{end}}></td>{{end}}
</tr>
<!-- Klijenti -->
@@ -223,33 +226,6 @@
</tr>
<!-- Podsetnici -->
<tr class="matrica-modul"><td {{if eq .KorisnikUloga "superadmin"}}colspan="3"{{else}}colspan="2"{{end}}>Podsetnici</td></tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Pregled podsetnika</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__podsetnik.pregled" {{if index .DozvoleRadnik "podsetnik.pregled"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__podsetnik.pregled" {{if index .DozvoleAdmin "podsetnik.pregled"}}checked{{end}}></td>{{end}}
</tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Dodavanje podsetnika</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__podsetnik.dodaj" {{if index .DozvoleRadnik "podsetnik.dodaj"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__podsetnik.dodaj" {{if index .DozvoleAdmin "podsetnik.dodaj"}}checked{{end}}></td>{{end}}
</tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Izmena podsetnika</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__podsetnik.izmeni" {{if index .DozvoleRadnik "podsetnik.izmeni"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__podsetnik.izmeni" {{if index .DozvoleAdmin "podsetnik.izmeni"}}checked{{end}}></td>{{end}}
</tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Brisanje podsetnika</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__podsetnik.obrisi" {{if index .DozvoleRadnik "podsetnik.obrisi"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__podsetnik.obrisi" {{if index .DozvoleAdmin "podsetnik.obrisi"}}checked{{end}}></td>{{end}}
</tr>
<!-- Izveštaji -->
<tr class="matrica-modul"><td {{if eq .KorisnikUloga "superadmin"}}colspan="3"{{else}}colspan="2"{{end}}>Izveštaji</td></tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
@@ -273,37 +249,19 @@
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__podesavanja.izmeni" {{if index .DozvoleAdmin "podesavanja.izmeni"}}checked{{end}}></td>{{end}}
</tr>
<!-- Korisnici -->
<tr class="matrica-modul"><td {{if eq .KorisnikUloga "superadmin"}}colspan="3"{{else}}colspan="2"{{end}}>Korisnici</td></tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Pregled korisnika</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__korisnik.pregled" {{if index .DozvoleRadnik "korisnik.pregled"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__korisnik.pregled" {{if index .DozvoleAdmin "korisnik.pregled"}}checked{{end}}></td>{{end}}
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Izmena pozadine prijavne stranice</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__podesavanja.login_pozadina" {{if index .DozvoleRadnik "podesavanja.login_pozadina"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__podesavanja.login_pozadina" {{if index .DozvoleAdmin "podesavanja.login_pozadina"}}checked{{end}}></td>{{end}}
</tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Dodavanje korisnika</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__korisnik.dodaj" {{if index .DozvoleRadnik "korisnik.dodaj"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__korisnik.dodaj" {{if index .DozvoleAdmin "korisnik.dodaj"}}checked{{end}}></td>{{end}}
</tr>
<!-- Tema -->
<tr class="matrica-modul"><td {{if eq .KorisnikUloga "superadmin"}}colspan="3"{{else}}colspan="2"{{end}}>Tema</td></tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Izmena korisnika</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__korisnik.izmeni" {{if index .DozvoleRadnik "korisnik.izmeni"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__korisnik.izmeni" {{if index .DozvoleAdmin "korisnik.izmeni"}}checked{{end}}></td>{{end}}
</tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Brisanje korisnika</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__korisnik.obrisi" {{if index .DozvoleRadnik "korisnik.obrisi"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__korisnik.obrisi" {{if index .DozvoleAdmin "korisnik.obrisi"}}checked{{end}}></td>{{end}}
</tr>
<tr style="border-bottom:0.5px solid var(--ivica);">
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Promena uloge korisnika</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__korisnik.uloga" {{if index .DozvoleRadnik "korisnik.uloga"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__korisnik.uloga" {{if index .DozvoleAdmin "korisnik.uloga"}}checked{{end}}></td>{{end}}
<td style="padding:9px 16px;font-size:13px;color:var(--tekst-glavni);">Lična tema naloga</td>
<td class="matrica-checkbox"><input type="checkbox" name="radnik__tema.lokalno" {{if index .DozvoleRadnik "tema.lokalno"}}checked{{end}}></td>
{{if eq .KorisnikUloga "superadmin"}}<td class="matrica-checkbox"><input type="checkbox" name="admin__tema.lokalno" {{if index .DozvoleAdmin "tema.lokalno"}}checked{{end}}></td>{{end}}
</tr>