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:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type sqliteDozvoleRepo struct {
|
||||
@@ -27,6 +28,28 @@ func InicijalizujDozvole(ctx context.Context, db *sql.DB, defaultFn func(uloga,
|
||||
return popuniPodrazumevano(ctx, db, defaultFn, sveAkcije)
|
||||
}
|
||||
|
||||
// OcistiSirociceDoz briše iz tabele dozvola redove čija akcija više ne postoji
|
||||
// u sveAkcije (npr. nakon uklanjanja zastarele dozvole iz koda). Vraća broj obrisanih.
|
||||
func OcistiSirociceDoz(ctx context.Context, db *sql.DB, sveAkcije []string) (int64, error) {
|
||||
if len(sveAkcije) == 0 {
|
||||
// sigurnosna brana — bez liste bismo obrisali sve, što ne želimo
|
||||
return 0, nil
|
||||
}
|
||||
placeholders := strings.Repeat("?,", len(sveAkcije))
|
||||
placeholders = strings.TrimSuffix(placeholders, ",")
|
||||
args := make([]any, len(sveAkcije))
|
||||
for i, a := range sveAkcije {
|
||||
args[i] = a
|
||||
}
|
||||
rezultat, err := db.ExecContext(ctx,
|
||||
`DELETE FROM dozvole WHERE akcija NOT IN (`+placeholders+`)`, args...)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("ntech: dozvole.OcistiSirocice: %w", err)
|
||||
}
|
||||
br, _ := rezultat.RowsAffected()
|
||||
return br, nil
|
||||
}
|
||||
|
||||
// popuniPodrazumevano upisuje sve podrazumevane dozvole u bazu
|
||||
func popuniPodrazumevano(ctx context.Context, db *sql.DB, defaultFn func(uloga, akcija string) bool, sveAkcije []string) error {
|
||||
for _, uloga := range []string{"radnik", "admin", "superadmin"} {
|
||||
|
||||
Reference in New Issue
Block a user