Files
GoNtech/internal/middleware/moduli.go
T
Dasko 6d066f6704 feat(moduli): mehanizam uključenih modula — Moduli mapa i RequireModul (Faza 0)
config.SviModuli + PodaciStranice.Moduli (uslovni meni, analogno Dozvole)
i middleware.RequireModul (zaštita ruta, analogno RequireDozvola). Sloj
iznad RBAC-a: zahtev mora proći i „modul uključen" i „korisnik sme".
Dopunjen test (TestSviModuli). Time je Faza 0 kompletna.
2026-06-13 20:23:24 +02:00

28 lines
1.0 KiB
Go

package middleware
import (
"context"
"net/http"
)
// RequireModul je chi middleware koji propušta zahtev samo ako je traženi zakonski
// modul uključen za firmu (prema profilu firme iz podešavanja). Ovo je sloj IZNAD
// RBAC-a: „da li firma uopšte koristi modul", nezavisno od „da li korisnik sme"
// (RequireDozvola). Zahtev mora proći oba sloja.
//
// Provera se prosleđuje kao funkcija (proveri) da paket middleware ne zavisi od
// config/sqlite — isti obrazac kao RequireDozvola. U praksi je to closure koja
// učita podešavanja i pozove config.ModulUkljucen.
func RequireModul(proveri func(ctx context.Context, modul string) bool, modul string) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !proveri(r.Context(), modul) {
postaviFlashGresku(w, "Ovaj modul nije uključen za vašu firmu.")
http.Redirect(w, r, "/dashboard", http.StatusSeeOther)
return
}
next.ServeHTTP(w, r)
})
}
}