[ nenadvr @ 14.11.2009. 17:11 ] @
Pravim asp.net sajt u kome mi treba 2 nacina logovanja, npr. administratori i korisnici. Drugacija mi je tabela u bazi za jedne i za druge i drugaciji je upit prilikom logovanja. Kako se to resava? Znam da ne mogu da stavim 2 <forms loginUrl="nekastrana.aspx"> taga u <authentication> tagu u web.config fajlu, a to bi mi bas trebalo
[ pl4stik @ 15.11.2009. 10:39 ] @
Jesi vido Membership provider:

http://www.asp.net/learn/security-videos/

Citat:
nenadvr: ... Drugacija mi je tabela u bazi za jedne i za druge i drugaciji je upit prilikom logovanja. Kako se to resava?...


Code:
     
   if (User.IsInRole("admin"))
        {
            //ako je u roli admin
        }
        else if (User.IsInRole("user"))
        {
            //ako je u roli admin
        }




Citat:
nenadvr: ... Znam da ne mogu da stavim 2 <forms loginUrl="nekastrana.aspx"> taga u <authentication> tagu u web.config fajlu, a to bi mi bas trebalo


Ovo bas nisam razumeo, jel hoces regirekciju u odnosu na rolu ?
[ mmix @ 15.11.2009. 15:06 ] @
Znam za ovaj problem, imao sam slican (morao sam da izmesam dve user baze). Moraces da napravis svoje membership i role provider za ovo i da ih registrujes u config fajlu. Onda u provajderu ispitas i jedan i drugi izvor i na osnovu toga uradis authentikaciju i definisise role. Nemoj se plasiti ovoga, ako je baza usera readonly imas dva ili tri metoda da implementiras i posle se sve to lepo uklopi sa asp.net security-em.

Google: "writing asp.net membership provider"




[ nenadvr @ 15.11.2009. 18:59 ] @
Korisnika sam i napravio da se loguje preko tog membershipa-login kontrole i provera njegove unete podatke prilikom logovanja u aspnet_users tabeli. Ali sam mislio da cuvam podatke za administratora u drugoj tabeli i on nema takvu autentikaciju preko username i passworda nego neke druge podatke sto cini mi se znaci da moram rucno da ga ulogujem ako ne mislim da pisem neki kastom membership provider sto bas mi i nije namera. E sad zato mi je i trebala dvostruka redirekcija jer ako bi neko kliknuo na link za stranicu za administratora ( a nije autorizovan) onda necu da mi se preusmeri na stranicu "default" za logovanje korisnika nego za logovanje admina. To bi, cini mi se mogao da postignem kad bi u page_load metodu stranice za logovanje proveravao svaki put odakle je link stigao pa ako je sa stranice za admine onda da ga preusmerim na stranicu za njihovo logovanje.
Samo kako to da ocitam to nemam pojma?
Zato mi i ne pase kod:

if (User.IsInRole("admin"))
{
//ako je u roli admin
}
else if (User.IsInRole("user"))
{
//ako je u roli admin
}
jer to znaci da su vec ulogivani a ja ih proveravam u kojoj su roli, zar ne?

Hvala na odgovorima!
[ sparc @ 16.11.2009. 07:18 ] @
Izvini ali nisi jasan "To bi, cini mi se mogao da postignem kad bi u page_load metodu stranice za logovanje proveravao svaki put odakle je link stigao pa ako je sa stranice za admine onda da ga preusmerim na stranicu za njihovo logovanje. ":
Kako znas u ovom trenutku da je iz grupe admin. Znaci mora da imas dve stranice ili dva linka, jedan/u za admin logovanje a drugi/u za user logovanje, pa kad je tako onda imas resen problem, usmeri ih na odgovarajucu stranicu, ili ako imas u meniju moras da imas dve stavke, drugacije nije moguce nikako, jer ti u trenutku kad nisu logovani ne znas u koju rolu korisnik zeli da se loguje.
Malo si kontradiktoran, ali mislim da je scenario sledeci:

Home->[izbor role](link,strana.meni) user = anonimous ->[admin] -> [admin login]
->[user] -> [user login]

Kad se logujes ne znam sta nameravas dalje?
[ pl4stik @ 16.11.2009. 07:39 ] @
Citat:
nenadvr: ... E sad zato mi je i trebala dvostruka redirekcija jer ako bi neko kliknuo na link za stranicu za administratora ( a nije autorizovan) onda necu da mi se preusmeri na stranicu "default" za logovanje korisnika nego za logovanje admina...


Meni ovde nije jasno sta znaci autorizovan dali dali je uopste logovan ili u kojoj je roli?

A strana sa koje je neko doso:

Code:

    protected void Page_Load(object sender, EventArgs e)
    {
        string pp = Request.UrlReferrer.ToString();
        if (pp == "www.mojastrana.com/strana1.aspx")
        {
            //redirekt
        }

    }
[ sparc @ 16.11.2009. 10:17 ] @
Prvo kada pristupis home stranici ti si anonymous user. Ovim userima moze biti zabranjen pristup
kroz web.config fajl, pa bi te sam membership manager usmerio na login stranicu i odmah bi
morao da se logujes.
Drugo kad pristupis home stranici ti nisi pridodat nikakvoj roli, tek kad se logujes ti dobijas
odredjena prava, tj postajes autorizovan korisnik.
Nije mi jasno zasto zelis dve login stranice, kad se i obican korisnik i administrator mogu
logovati jednom stranicom, potrebno je da definises dve razlicite role, a kroz menu ili na neki drugi nacin
mozes upravljati pristupima odredjenim podacima, probano i odlicno funkcionise.
Ali ako ipak zelis da napravis dve login stranice tada napravi UserLogin.aspx za obicnog korisnika i
AdminLogin.aspx za administratora, pazi obe stranice moraju da ti budu na rutu sajta jer
im anonymous ne moze pristupiti. na Home stranici napravi dva linka AdminLogin u ciji ces URL
uneti ~/Adminlogin.aspx i UserLogin gde je url ~/UserLogin.aspx, ne vidim problem da se ovo ne moze
i zasto sebi koplikujes zivot.
[ mmix @ 16.11.2009. 10:25 ] @
Hoce dve strane zato sto misli da mu je to resenje jer mu se useri nalaze u dva razlicita izvora. Misli da moze to da resi kroz config fajl i dve login strane sa fabrickim membership providerom a ne moze.

nenadvr, imas dve opcije:

1. Tvoj custom membership provider (preporucujem) koji uopste nije tako tezak za pravljenje kao sto ti mislis a kad ga naprvais ostatak asp.net secuity-a moze da ga koristi transaprentno (tj mozes da imas jednu login formu koja ce mocui da uloguje i korisnika i admina).
2. Da skroz izbacis membership provider, da ukljucis forms authentication i da sam izdajes FormsAuthentication tikete kao sto se nekad radilo u ASP.NET 1.1. Em sto je ovo zastarelo em taj isti kod koji moras da napises da proveris oba izvora je urpavo kod koji treba da ubacis u custom membership provajder takoda nisi nista ustedeo na trudu i vremenu.

Fabricki membership provider ne moze da se namesti da trazi korisnike u dva razlicita izvora niti mozes imati vise od jednog default membership provajdera.
[ nenadvr @ 16.11.2009. 11:40 ] @
sparc: "jer ti u trenutku kad nisu logovani ne znas u koju rolu korisnik zeli da se loguje."

U config fajlu postoji <authentication><forms loginUrl="UserLogin.aspx"/> koja vazi za sve
Ja ne znam u koju rolu hoce da se uloguje ali sam hteo da ako neko pokusa da otvori stranu za admina (npr. Admin.aspx) on ce da ode ne UserLogin.aspx, a ja bi da ga preusmerim na logovanje admina (AdminLogin.aspx), i zato mi je trebalo da ocitam u Page_Load strane UserLogin.aspx ( ili nekako drugacije) sa koje stranice je dosao link, ako je sa Admin.aspx onda da ide na AdminLogin.aspx.

Medjutim ako podusavam da pomocu "Request.UrlReferrer.ToString();" da provalim odakle je dosao to nije to jer, ako neko klikne na link Admin.aspx a nije autorizivan onda je on automatski preusmeren na UserLogin.aspx, uopste nije ni bio na strani Admin.aspx, nego mi ovaj prethodni kod pokazuje stranu na kojoj je bio pre pokusaja da udje na Admin.aspx

Ali da ne komplikujem suvise, odradicu vec nesto kako je savetovao sparc, da pojednostavim malo. Hvala na odgovorima
[ pl4stik @ 16.11.2009. 12:45 ] @
Pa tako kazi,

Citat:
nenadvr: U config fajlu postoji <authentication><forms loginUrl="UserLogin.aspx"/> koja vazi za sve
Ja ne znam u koju rolu hoce da se uloguje ali sam hteo da ako neko pokusa da otvori stranu za admina (npr. Admin.aspx) on ce da ode ne UserLogin.aspx, a ja bi da ga preusmerim na logovanje admina (AdminLogin.aspx), ...


U "strani za admina" (Admin.aspx)

Code:
   
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!User.Identity.IsAuthenticated)
        {
            //redirekcija na AdminLogin.aspx
        }
        if (!User.IsInRole("admin"))
        {
            //redirekcija na AdminLogin.aspx
        }
    }

a na AdminLogin.aspx stavish jedan login i definises DestinationPageUrl="~/Admin.aspx".

Happy coding