Cuprins
În aplicațiile web în care avem zone private pe care ar trebui să le acceseze doar membrii înregistrați, trebuie să implementăm mecanisme care să permită utilizatorilor să vadă doar după autentificare.filtre Sunt instrumente ale Șine care ne permit să interceptăm apeluri la metode și acțiuni, permițându-ne să adăugăm metodele noastre înainte, în timpul sau după, astfel încât să putem controla fluxul aplicației după cum considerăm potrivit pentru a ne îndeplini funcționalitățile. În acest stadiu vom folosi înainte de filtrare pentru a intercepta apelurile la acțiunile noastre, în acest fel putem verifica sesiunea și putem ști dacă utilizatorul este conectat, dacă nu, le redirecționăm către oriunde am aranjat. Vom plasa această metodă în controlerul aplicației noastre, deoarece este baza și în acest fel va fi disponibilă pentru întreaga aplicație.
Să vedem codul pe care îl avem pentru el:
autorizați def, cu excepția cazului în care sesiunea [: user_id] flash [: notice] = "Vă rugăm să vă conectați" redirect_to (: controller => "login" ,: action => "login") end end
Deoarece vedem că logica din spatele acestui lucru este destul de simplă, folosim propriul condițional Ruby, care este dacă nu, acest lucru ne permite să condiționăm că, dacă nu este îndeplinită condiția, codul blocului este executat. Deci, dacă nu avem un ID al unui utilizator în sesiune, îl vom redirecționa și îi vom cere să se autentifice în aplicație.
Acum, în controlerul nostru de administrator, vom filtra și vom cere utilizatorilor să se autentifice:
clasa AdminController <ApplicationController before_filter: authorize
Și în controlerul nostru de conectare facem, de asemenea, ceva similar, doar că vom adăuga excepția acțiunii de conectare, care este cea care ne interesează, care poate fi văzută de orice utilizator neautentificat:
class LoginController: autentificare
Dacă nu suntem conectați, ar trebui să vedem așa ceva când accesăm pagina administrativă a aplicației:
Acum avem modalitatea de a aplica și filtra că utilizatorii nu pot vedea panourile administrative dacă nu sunt conectați, totuși avem o ultimă inconsecvență, în ceea ce privește eliminarea utilizatorilor, trebuie să evităm ștergerea administratorului general al aplicației, deoarece dacă o facem nu o faceți, există posibilitatea ca un utilizator să șteargă toți utilizatorii și să rămânem fără acces decât dacă modificăm direct baza de date și este ceva inacceptabil pentru aplicația noastră. Pentru aceasta, vom crea din nou un eveniment special, în acest caz va fi înainte_distruge, ce face asta înainte de a face acțiunea distruge rulați o metodă.
Să vedem codul:
before_destroy: dont_destroy_dave def dont_destroy_dave ridică "Nu se poate distruge dave" dacă self.name == 'dave' se termină
Apoi, în acțiunea noastră de ștergere, vom captura mesajul și îl vom afișa, să vedem codul acțiunii:
def delete_user id = params [: id] if id && user = User.find (id) begin user.destroy flash [: notice] = "User # {user.name} șters" rescue flash [: notice] = "Can ' t ștergeți acel utilizator "end end redirect_to (: action =>: list_users) end
Cu aceasta ne încheiem tutorialul privind limitarea accesului la aplicația noastră, este important să acoperim toate posibilitățile pentru a împiedica utilizatorii neautorizați să vadă sau să modifice partea noastră administrativă, pentru a evita viitoarele dureri de cap și probleme de securitate care vor face ca aplicația noastră să fie nesigură și instabilă.V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv