Turinys
Žiniatinklio programose, kuriose turime privačias zonas, kurias turėtų pasiekti tik registruoti nariai, turime įdiegti mechanizmus, leidžiančius vartotojams matyti tik tada, kai jie yra patvirtinti.The filtrus Jie yra įrankiai Bėgiai kurie leidžia mums perimti skambučius į metodus ir veiksmus, leidžiantys pridėti savo metodus prieš, per arba po to, kad galėtume kontroliuoti programos srautą, kaip mums atrodo tinkama, kad galėtume atlikti savo funkcijas. Šiame etape mes ketiname naudoti prieš filtrą norėdami perimti skambučius į mūsų veiksmus, tokiu būdu galime patikrinti seansą ir žinoti, ar vartotojas yra prisijungęs, jei ne, tada nukreipiame juos į bet kurią vietą. Šį metodą įdėsime į savo programų valdiklį, nes jis yra pagrindas ir tokiu būdu jis bus prieinamas visai programai.
Pažiūrėkime, kokį kodą turime:
def autorizuoti, nebent seansas [: vartotojo_id] „flash“ [: pranešimas] = "Prašome prisijungti" redirect_to (: controller => "login" ,: action => "login") pabaiga
Kadangi matome, kad logika yra gana paprasta, mes naudojame pačios Ruby sąlygą, kuri yra nebent, tai leidžia mums nustatyti, kad nebent įvykdyta sąlyga, bloko kodas yra vykdomas. Taigi, jei sesijoje neturime vartotojo ID, mes jį peradresuosime ir paprašysime autentifikuoti programoje.
Dabar savo administratoriaus valdiklyje mes filtruosime ir paprašysime naudotojų autentifikuoti:
klasė AdminController <ApplicationController before_filter: autorizuoti
Savo prisijungimo valdiklyje mes taip pat darome kažką panašaus, tik pridėsime dominančio prisijungimo veiksmo išimtį, kurią gali pamatyti bet kuris nepatvirtintas vartotojas:
klasės „LoginController“: prisijungimas
Jei nesame prisijungę, turėtume pamatyti kažką panašaus, kai einame į programos administravimo puslapį:
Dabar turime būdą, kaip pritaikyti ir filtruoti, kad vartotojai negalėtų matyti administracinių skydelių, jei jie nėra prisijungę, tačiau turime paskutinį neatitikimą, nes naudotojų pašalinimo srityje turime vengti ištrinti pagrindinį programos administratorių, nes jei tai padarysime to nedarykite, yra tikimybė, kad vartotojas ištrins visus vartotojus, o mes liksime be prieigos, nebent tiesiogiai modifikuosime duomenų bazę ir tai yra nepriimtina mūsų programai. Tam mes vėl sukursime ypatingą įvykį, šiuo atveju tai bus before_destroy, ką tai daro prieš atliekant veiksmą sunaikinti paleiskite metodą.
Pažiūrėkime kodą:
before_destroy: dont_destroy_dave def dont_destroy_dave pakelti „Negaliu sunaikinti dave“, jei self.name == 'dave' end
Tada atlikdami ištrynimo veiksmą mes užfiksuosime pranešimą ir parodysime jį, pažiūrėkime veiksmo kodą:
def delete_user id = params [: id] if id && user = User.find (id) begin user.destroy flash [: pranešimas] = "Vartotojo numeris {naudotojo vardas} ištrintas" gelbėjimo blykstė [: pranešimas] = "Gali" t ištrinti tą vartotojo "end end redirect_to (: action =>: list_users) end
Baigę mūsų mokymo programą, kaip apriboti prieigą prie mūsų programos, svarbu išnaudoti visas galimybes, kad neleistini vartotojai nematytų ar nekeistų mūsų administracinės dalies, taip išvengdami galvos skausmo ir saugumo problemų, dėl kurių mūsų programa bus nesaugi ir nestabili.Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką