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:
@@ -13,6 +13,7 @@ type ArtikalRepository interface {
|
||||
DohvatiID(ctx context.Context, id int64) (*model.Artikal, error)
|
||||
Kreiraj(ctx context.Context, a *model.Artikal) (int64, error)
|
||||
Izmeni(ctx context.Context, a *model.Artikal) error
|
||||
PremestiKategoriju(ctx context.Context, id int64, kategorijaID *int64) error
|
||||
Obrisi(ctx context.Context, id int64) error
|
||||
}
|
||||
|
||||
|
||||
@@ -147,6 +147,17 @@ func (r *ArtikalRepo) Izmeni(ctx context.Context, a *model.Artikal) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// PremestiKategoriju menja samo kategoriju artikla (premeštanje u drugu kategoriju).
|
||||
// kategorijaID može biti nil — tada artikal ostaje bez kategorije.
|
||||
func (r *ArtikalRepo) PremestiKategoriju(ctx context.Context, id int64, kategorijaID *int64) error {
|
||||
_, err := r.db.ExecContext(ctx,
|
||||
"UPDATE artikli SET kategorija_id = ? WHERE id = ?", kategorijaID, id)
|
||||
if err != nil {
|
||||
return fmt.Errorf("ntech: ArtikalRepo.PremestiKategoriju: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Obrisi briše artikal po ID-u
|
||||
func (r *ArtikalRepo) Obrisi(ctx context.Context, id int64) error {
|
||||
_, err := r.db.ExecContext(ctx, "DELETE FROM artikli WHERE id = ?", id)
|
||||
|
||||
@@ -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