Do sada sam više puta pravio veb aplikacije koje su zahtevale deo za administratora, moderatora, posetioca itd... Međutim počeo sam jedan malo veći projekat, za koji se nadam da će biti dobro posećen pa bih i da razrešim neke od svojih dilema. Jedna je ova sa sistemom korisnika.
Predpostavimo da postoji administrator, registrovani korisnik i običan posetilac. Admin će naravno imati neke dodatne stranice u navigaciji i potrebno je da ima privilegije za pristup tim stranicama.
Moje rešenje je da napravim klasu "Korisnik" te iz nje izvedem sve potrebne "titule", dakle admin ima svoju klasu, posetilac svoju itd. Osnovna klasa ima funkcije za dodavanje novog korisnika, logovanje, proveru da li je korisnik ulogovan i sve te funkcionalnosti.
Dakle kod u load-u master stranice bude na foru:
//jedan način logovanja
Korisnik k = new Korisnik(this.Request);
if( k.Ulogovan ) ... //ovo je ne bitno
k.Logout( this.Response);
//drugi način
Korisnik k2 = Korisnik.Login(username, password);
// Ovo je bitno - kako proverava da li je korisnik sme da poseti ovu adresu:
if( k2.proveriPrava( httpAdresa) == false) ... redirektuj ga negde ...
Enivej, kako radi ova funkcija proveriProva()... U application_Start funkciji sam iz određenih fajlova stavio da se čitaju liste za prava pristupa i linkove u navigaciji za sve tipove korisnika i to se snimi u nekoj static listi za svaku klasu posebno. Znači učita iz fajla sve stranice kojima može da pristupi posetilac i to ubaci u static listu iz Posetilac klase i tako za svaku klasu. I to se jelte uradi jednom kada se izvrši application_start.
Ono što je mene pitanje je - da li je ovo pametno ovako? Ili je bolje rešenje da imam tabelu u bazi koja će čuvati adrese stranica kojima određena grupa može da pristupi, pa da kad god bude page_load master stranice da se uradi sql upit i proveri da li postoji pravo pristupa...?
Znam da oba rade za sajtove sa malo posećenosti, mene zanima šta je od ovoga (ili nešto treće?) najoptimalnije rešenje...
Hvala na pažnji i oprostite na dužini poruke
