Spisie treści
W aplikacjach internetowych, w których mamy prywatne strefy, do których dostęp powinni mieć tylko zarejestrowani członkowie, musimy wdrożyć mechanizmy, które pozwolą użytkownikom zobaczyć dopiero po uwierzytelnieniu.ten filtry Są narzędziami Szyny które pozwalają nam przechwytywać wywołania metod i akcji, co pozwala nam dodawać nasze metody przed, w trakcie lub po, dzięki czemu możemy kontrolować przepływ aplikacji według własnego uznania w celu spełnienia naszych funkcji. Na tym etapie będziemy używać przed filtrem aby przechwycić wezwania do naszych działań, w ten sposób możemy zweryfikować sesję i wiedzieć, czy użytkownik jest zalogowany, jeśli nie to przekierowujemy go tam, gdzie się umówiliśmy. Umieścimy tę metodę w naszym kontrolerze aplikacji, ponieważ jest to podstawa i dzięki temu będzie dostępna dla całej aplikacji.
Zobaczmy kod, który na to mamy:
def autoryzuj chyba session [: user_id] flash [: notice] = "Proszę się zalogować" redirect_to (: controller => "login",: action => "login") end end
Ponieważ widzimy, że logika stojąca za tym jest dość prosta, używamy własnego warunku Rubiego, którym jest chyba że, pozwala nam to założyć, że jeśli warunek nie zostanie spełniony, kod bloku zostanie wykonany. Jeśli więc nie mamy identyfikatora użytkownika w sesji, przekierujemy go i poprosimy o uwierzytelnienie w aplikacji.
Teraz w naszym kontrolerze administratora będziemy filtrować i prosić użytkowników o uwierzytelnienie:
class AdminController <ApplicationController before_filter: authorize
W naszym kontrolerze logowania również robimy coś podobnego, tylko dodamy wyjątek akcji logowania, który jest tym, który nas interesuje i który może zobaczyć każdy nieuwierzytelniony użytkownik:
class LoginController: login
Jeśli nie jesteśmy zalogowani, powinniśmy zobaczyć coś takiego podczas uzyskiwania dostępu do strony administracyjnej aplikacji:
Teraz mamy sposób na zastosowanie i filtrowanie, że użytkownicy nie widzą paneli administracyjnych, jeśli nie są zalogowani, jednak mamy ostatnią niespójność, w części eliminowania użytkowników musimy unikać usuwania generalnego administratora aplikacji, ponieważ jeśli to zrobimy nie rób tego, istnieje możliwość, że użytkownik usunie wszystkich użytkowników, a my pozostaniemy bez dostępu, chyba że bezpośrednio zmodyfikujemy bazę danych i jest to coś niedopuszczalnego dla naszej aplikacji. W tym celu ponownie stworzymy specjalne wydarzenie, w tym przypadku będzie to przed_zniszczyć, co to robi przed wykonaniem akcji? zniszczyć uruchomić metodę.
Zobaczmy kod:
before_destroy: dont_destroy_dave def dont_destroy_dave podnieś "Nie można zniszczyć dave'a" jeśli self.name == 'dave' end
Następnie w naszej akcji usuwania przechwycimy wiadomość i wyświetlimy ją, zobaczmy kod akcji:
def delete_user id = params [: id] if id && user = User.find (id) begin user.destroy flash [: notice] = "Użytkownik # {user.name} usunięty" rescue flash [: notice] = "Może ' t usunąć tego użytkownika "end end redirect_to (: action =>: list_users) end
Na tym kończymy nasz samouczek dotyczący ograniczania dostępu do naszej aplikacji, ważne jest, aby omówić wszystkie możliwości, aby uniemożliwić nieautoryzowanym użytkownikom przeglądanie lub modyfikowanie naszej części administracyjnej, aby uniknąć przyszłych bólów głowy i problemów z bezpieczeństwem, które sprawią, że nasza aplikacja będzie niebezpieczna i niestabilna.Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt