Sadržaj
U web aplikacijama gdje imamo privatne zone kojima bi trebali pristupiti samo registrirani članovi, moramo implementirati mehanizme koji korisnicima omogućuju da vide samo nakon što su autentificirani.The filteri Oni su alati za Tračnice koji nam omogućuju presretanje poziva metodama i radnjama, dopuštajući nam da dodamo svoje metode prije, tijekom ili nakon, tako da možemo kontrolirati tijek aplikacije kako smatramo prikladnim kako bismo ispunili svoje funkcionalnosti. U ovoj fazi ćemo koristiti prije filtera da bismo presreli pozive na naše radnje, na ovaj način možemo provjeriti sesiju i znati je li korisnik prijavljen, ako ne, preusmjeravamo ih na bilo koje mjesto koje smo dogovorili. Ovu ćemo metodu staviti u naš aplikacijski kontroler budući da je baza i na taj način bit će dostupna za cijelu aplikaciju.
Pogledajmo kod koji imamo za njega:
def autorizirati osim ako sesija [: user_id] flash [: notice] = "Molimo prijavite se" redirect_to (: controller => "login" ,: action => "login") end end
Kako vidimo da je logika iza ovoga prilično jednostavna, koristimo Rubyin vlastiti uvjet koji je osim ako, to nam omogućuje uvjetovati da će se, osim ako uvjet nije ispunjen, izvršiti kôd bloka. Dakle, ako nemamo ID korisnika u sesiji, preusmjerit ćemo ga i zatražiti da se autentificira u aplikaciji.
Sada ćemo u našem administratorskom kontroleru filtrirati i tražiti od korisnika da se ovjere:
klasa AdminController <ApplicationController before_filter: autorizirajte
I u našem kontroleru za prijavu također radimo nešto slično, samo ćemo dodati iznimku radnje prijave koja nas zanima, a koju može vidjeti svaki neovlašteni korisnik:
klase LoginController: login
Ako nismo prijavljeni, trebali bismo vidjeti nešto poput ovoga prilikom pristupa administrativnoj stranici aplikacije:
Sada imamo način primjene i filtriranja da korisnici ne mogu vidjeti administrativne ploče ako nisu prijavljeni, međutim imamo posljednju nedosljednost, u dijelu uklanjanja korisnika moramo izbjeći brisanje općeg administratora aplikacije jer ako to učinimo ne učinite to, postoji mogućnost da korisnik izbriše sve korisnike, a mi ostanemo bez pristupa ako izravno ne izmijenimo bazu podataka, a to je nešto neprihvatljivo za našu aplikaciju. Za ovo ćemo ponovno stvoriti poseban događaj, u ovom slučaju to će biti prije_razoriti, što to radi prije nego što učinite akciju uništiti pokrenuti metodu.
Pogledajmo kod:
before_destroy: dont_destroy_dave def dont_destroy_dave podići "Ne mogu uništiti davea" ako self.name == 'dave' završi
Zatim ćemo u našoj radnji brisanja uhvatiti poruku i prikazati je, da vidimo kod radnje:
def delete_user id = params [: id] if id && user = User.find (id) start user.destroy flash [: notice] = "Korisnik # {user.name} obrisan" spasilačka bljeskalica [: obavijest] = "Može ' t izbrisati tog korisnika "end end redirect_to (: action =>: list_users) end
Ovime završavamo naš vodič o ograničavanju pristupa našoj aplikaciji, važno je pokriti sve mogućnosti kako bismo spriječili neovlaštene korisnike da vide ili izmijene naš administrativni dio, kako bismo izbjegli buduće glavobolje i sigurnosne probleme koji će našu aplikaciju učiniti nesigurnom i nestabilnom.Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod