Obsah
Ve webových aplikacích, kde máme soukromé zóny, ke kterým by měli mít přístup pouze registrovaní členové, musíme implementovat mechanismy, které uživatelům umožní vidět pouze po ověření.The filtry Jsou to nástroje Kolejnice které nám umožňují zachytit volání metod a akcí, což nám umožňuje přidat naše metody buď před, během nebo po, abychom mohli řídit tok aplikace, jak uznáme za vhodné, abychom splnili naše funkce. V této fázi použijeme před filtrem abychom zachytili volání našich akcí, můžeme tímto způsobem ověřit relaci a vědět, zda je uživatel přihlášen, pokud ne, pak je přesměrujeme kamkoli jsme se domluvili. Tuto metodu umístíme do našeho řadiče aplikací, protože je základem a tímto způsobem bude k dispozici pro celou aplikaci.
Podívejme se na kód, který k tomu máme:
definovat autorizaci, pokud relace [: user_id] flash [: notice] = "Přihlaste se" redirect_to (: controller => "login" ,: action => "login") konec konec
Jak vidíme, že logika je za tím docela jednoduchá, používáme vlastní podmínku Ruby, což je pokud, to nám umožňuje podmínit, že pokud není podmínka splněna, spustí se kód bloku. Pokud tedy nemáme ID uživatele v relaci, přesměrujeme ho a požádáme ho o autentizaci v aplikaci.
Nyní v našem správci správce budeme filtrovat a žádat uživatele o ověření:
třída AdminController <ApplicationController before_filter: autorizovat
A v našem řadiči přihlášení také děláme něco podobného, pouze přidáme výjimku přihlašovací akce, která nás zajímá a kterou může vidět každý neautentizovaný uživatel:
třída LoginController: přihlášení
Pokud nejsme přihlášeni, měli bychom při přístupu na stránku pro správu aplikace vidět něco takového:
Nyní máme způsob, jak použít a filtrovat, že uživatelé nemohou vidět panely pro správu, pokud nejsou přihlášeni, nicméně máme jednu poslední nekonzistenci, v části eliminace uživatelů se musíme vyvarovat smazání generálního správce aplikace, protože pokud to uděláme nedělejte to, existuje možnost, že uživatel odstraní všechny uživatele a my zůstaneme bez přístupu, pokud přímo nezměníme databázi a nebude to pro naši aplikaci něco nepřijatelného. Za tímto účelem vytvoříme znovu speciální událost, v tomto případě to bude before_destroy„Co to udělá před provedením akce zničit spustit metodu.
Podívejme se na kód:
before_destroy: dont_destroy_dave def dont_destroy_dave zvýšit "Can't Destruction Dave" if self.name == 'dave' end
Pak v naší akci odstranění zachytíme zprávu a zobrazíme ji, podívejme se na kód akce:
def delete_user id = params [: id] if id && user = User.find (id) begin user.destroy flash [: notice] = "User # {user.name} deleted "cue flash [: notice] =" Can ' t odstranit toho uživatele "end end redirect_to (: action =>: list_users) end
Tímto dokončujeme náš návod na omezení přístupu k naší aplikaci, je důležité pokrýt všechny možnosti, jak zabránit neoprávněným uživatelům v prohlížení nebo úpravách naší administrativní části, aby se předešlo budoucím bolestem hlavy a problémům se zabezpečením, které způsobí, že naše aplikace bude nejistá a nestabilní.Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod