Hvala vam obojici, ovi odgovori su tacno ono sto sam trazio, mada pocinje da mi se vrti u glavi od ovog enterprise-a.
Jos uvijek imam nejasnocu, vezanu za smjestaj security kontrole.
Ne mislim na prijavu, nju svakako mora obaviti Win/Web klijent i proslijediti je web servicu, koji je autorizira.
Kada se korisnik vec prijavi (recimo da on spada u članove, radnike ili administratore) web servisu (dopao mi se onaj metod preko log-in i sesije u Code magazinu), gdje je mjesto na kome se odlucuje ima li taj korisnik pravo da obavi odredjenu akciju?
Prva mogucnost koja mi pada na pamet je da to sve smjestim u web service. Klijent se prijavi web servisu. Ovaj pozove neki od donjih slojeva i zatrazi iz baze spisak korisnika. Provjeri postoji li korisnik, odgovara li lozinka, te ako odgovara, ocitava njegova prava iz baze.
Posto web service cuva stanje sesije, svaki klijentov zahtjev za odredjenim resursom business sloja ce provjeriti web service, tj. pravila pristupa nalazice se u web servisu. Ako je korisnik administrator, web service ce mu, na zahtjev, pozvati i isporuciti svaki metod donjeg sloja, ako nije onda samo one koje mu dopusta, selektivno.
Problem sa ovim je sto se onda ono sto zapravo logicki spada u business process (prava pristupa) pomjerilo u web service. Ako se desi da se kasnije neki drugi projekat treba povezati sa business process slojem (recimo taj SMS servis ili nesto drugo), on ce imati apsolutni pristup svemu jer business proces isporucuje sve svoje resurse bez kontrole. Ako hocemo uvesti sigurnosna pravila, moracemo ih duplicirati i u tom novom projektu, jer od onih u web servisu nemamo koristi, posto se on ionako zaobilazi.
Druga opcija je da to sve stavim u business layer. U tom slucaju web service ce autorizirati klijenta, provjeriti ispravnost autentikacije pozivom donjem sloju, i cuvace sesiju, ali ce pri svakom pozivu donjeg sloja radi obavljanja neke operacije isporucivati mu username/password. Donji sloj ce, kada se pozove neka metoda, recimo UpdateAuthors, provjeriti korisnika u bazi, provjeriti njegove privilegije i ako ima pravo, obaviti akciju, u suprotnom baciti izuzetak. Problem sa ovim pristupom je sto svaki poziv donjeg sloja zahtijeva da on provjeri bazu s korisnicima i njihove privilegije, sto znacajno usporava proces.
Treca opcija, koja mi se vrti u glavi je da web service prihvati username/pass od klijenta, posalje ih business sloju, ovaj ih prihvati, provjeri i vrati web servisu podatke o autorizaciji, te neku oznaku privilegije. Ako je autentikacija uspjela, web servis ce sacuvati u sesiji (ako je to moguce) oznaku privilegije i sa sljedecim pozivima business sloju slati i nju. Business sloj ce samo ocitati poslanu oznaku i na osnovu nje odluciti da li izvrsiti odredjenu akciju ili isporuciti resurs. Ovo i dalje ostavlja odlucivanje o pravima business sloju, ali ne zahtijeva da ovaj za svaki poziv trazi korisnike u bazi i provjerava njihove privilegije.
Medjutim, ovo mi djeluje nekako suplje, jer se ocekuje "dobra saradnja" web servisa i business sloja, tj. ne izoluje totalno logiku u business sloj, pa se ocekuje da web service bude "iskren" i posalje pravu oznaku privilegije. To i nije problem dok su oni napravljeni da rade iskljicivo zajedno, ali bi bio problem ako bi se business sloju moglo pristupiti udaljeno, tj. neko bi mogao napisati svoj web servis koji ce pozivati business sloj sa udaljenosti i slati mu lazne oznake privilegije.
Ufff...napricah se ja. Pocetnik sam u ovome pa se izvinjavam ako ne mozete razumjeti sta pitam zbog neispravne terminologije i nacina objasnjavanja.
Ovo za sad radim u "edukativne svrhe", ako mi bude islo, trazicu od profesora da mi odobri diplomski na ovu temu, zato i gnjavim ovoliko sa teoretskim dijelom. Kasnije mozda pokusam to utrpati nekoj biblioteci. Mada, kad skontam koliko su ovdje biblioteke posjecene i profitabilne, sumnjam...