[ toxi_programer @ 29.04.2009. 23:01 ] @
Gospodo imam problem "filozofske" prirode te bih da vas konsultujem...

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:
Code:

//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
[ pl4stik @ 30.04.2009. 07:03 ] @
Dotle sam i ja od prilike doso s tim sto sam u startu imao 25 rola i ova provera koju si naveo mi se cinila i sada mi se cini preterana jer bih morao u svakoj strani (~600) da definisem sta i kako. Na svu srecu videh sta je i kako radi web config tool (wct) tj. wct dozvole definise u xml fajlovima koje smesta u foldere u kojima su strane znaci bitno je da ti strane budu rasporedjene po folderima tako da kad nabacish npr. treeview i vezes ga za web.sitemap u kome si definisao sve linkove za strane on pokazuje samo strane kojima mozes da pridjes zavisno u kojoj si roli !!! Cool, Super, Extra ali wct ne radi remote tako da ne mozes da ga postavish na web server pa zato nabacish custom resenje koje ne znam gde mi je sad ali ako te interesuje naci cu ga, stvarno je super. Inace provere koju si naveo gore ce ti trebati za autentifikaciju na web servis ako ga budes imao bar sam ja tako nekako morao..

Just my 2c
[ deerbeer @ 30.04.2009. 09:31 ] @
Jesi probao sa Forms Authentication metodom : http://www.15seconds.com/Issue/020220.htm
S obzirom da korisnike citas iz odredjenih fajlova, ovo sve mozes preusmeriti u web.config fajl
i koristiti standardne .NET klase i rutine za autentikaciju .

[ pl4stik @ 30.04.2009. 09:47 ] @
Evo ga:

http://www.4guysfromrolla.com/articles/052307-1.aspx

Super stvar
[ toxi_programer @ 30.04.2009. 14:59 ] @
Zahvaljujem vam na preporukama. :)

Probaću to da vidim da li odgovara, ali ipak sam više želeo da čujem šta je od ona dva načina koje sam ja naveo efikasnije... :)
Dakle da imam one static liste sa podacima ili da na svako otvaranje stranice radim sql upit i vidim da li je ta stranica, tom korisniku, dozvoljena.