Podsetnici: sprečen IDOR — provera vlasništva pre izmene/završavanja/brisanja
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"ntech/internal/model"
|
||||
)
|
||||
|
||||
// TestKorisnikSmeDaMenjaPodsetnik proverava zaštitu od IDOR-a: radnik sme da menja/briše
|
||||
// samo sopstveni podsetnik, admin/superadmin smeju bilo koji.
|
||||
func TestKorisnikSmeDaMenjaPodsetnik(t *testing.T) {
|
||||
radnik := &model.Korisnik{ID: 1, Uloga: "radnik"}
|
||||
drugiRadnik := &model.Korisnik{ID: 2, Uloga: "radnik"}
|
||||
admin := &model.Korisnik{ID: 3, Uloga: "admin"}
|
||||
|
||||
svojPodsetnik := &model.Podsetnik{ID: 100, KorisnikID: p(1)}
|
||||
tudjPodsetnik := &model.Podsetnik{ID: 101, KorisnikID: p(2)}
|
||||
nedodeljenPodsetnik := &model.Podsetnik{ID: 102, KorisnikID: nil}
|
||||
|
||||
slucajevi := []struct {
|
||||
naziv string
|
||||
korisnik *model.Korisnik
|
||||
podsetnik *model.Podsetnik
|
||||
ocekivano bool
|
||||
}{
|
||||
{"radnik menja svoj podsetnik", radnik, svojPodsetnik, true},
|
||||
{"radnik ne sme tuđi podsetnik", radnik, tudjPodsetnik, false},
|
||||
{"drugi radnik ne sme tuđi podsetnik", drugiRadnik, svojPodsetnik, false},
|
||||
{"radnik ne sme nedodeljen podsetnik", radnik, nedodeljenPodsetnik, false},
|
||||
{"admin sme tuđi podsetnik", admin, tudjPodsetnik, true},
|
||||
{"admin sme nedodeljen podsetnik", admin, nedodeljenPodsetnik, true},
|
||||
}
|
||||
|
||||
for _, sc := range slucajevi {
|
||||
t.Run(sc.naziv, func(t *testing.T) {
|
||||
dobijeno := korisnikSmeDaMenjaPodsetnik(sc.korisnik, sc.podsetnik)
|
||||
if dobijeno != sc.ocekivano {
|
||||
t.Errorf("korisnikSmeDaMenjaPodsetnik(%+v, %+v) = %v, očekivano %v",
|
||||
sc.korisnik, sc.podsetnik, dobijeno, sc.ocekivano)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user