Begränsad webbåtkomst (poster) gjord med Ruby on Rails

Innehållsförteckning

I webbapplikationer där vi har privata zoner som endast registrerade medlemmar ska komma åt måste vi implementera mekanismer som tillåter användare att bara se när de är autentiserade.
De filter De är verktyg för Räls som gör att vi kan fånga upp samtal till metoder och handlingar, så att vi kan lägga till våra metoder antingen före, under eller efter, så att vi kan styra applikationsflödet som vi finner lämpligt för att uppfylla våra funktioner. I detta skede kommer vi att använda före filter för att fånga upp samtalen till våra handlingar, på så sätt kan vi verifiera sessionen och veta om användaren är inloggad, om inte så omdirigerar vi dem till vart vi än har arrangerat. Vi kommer att placera denna metod i vår applikationskontroller eftersom den är basen och på så sätt kommer den att vara tillgänglig för hela applikationen.
Låt oss se koden vi har för den:
 def auktorisera om inte session [: user_id] flash [: notice] = "Logga in" redirect_to (: controller => "login" ,: action => "login") slutet slut 

Eftersom vi ser logiken bakom detta är ganska enkel, använder vi Rubys egna villkor som är såvida inte, detta tillåter oss att villkora att om inte villkoret är uppfyllt körs blockets kod. Så om vi inte har ett ID för en användare i sessionen kommer vi att omdirigera honom och be honom att autentisera i programmet.
Nu i vår administratörskontroller kommer vi att filtrera och be användare att autentisera:
 class AdminController <ApplicationController before_filter: authorize 

Och i vår inloggningskontroller gör vi också något liknande, bara vi lägger till undantaget för inloggningsåtgärden som är den vi är intresserade av som kan ses av alla oautentiserade användare:
 klass LoginController: logga in 

Om vi ​​inte är inloggade bör vi se något liknande när vi öppnar applikationens administrativa sida:

Nu har vi sättet att tillämpa och filtrera att användare inte kan se de administrativa panelerna om de inte är inloggade, men vi har en sista inkonsekvens, för att eliminera användare måste vi undvika att ta bort den allmänna administratören för applikationen eftersom om vi gör det gör det inte, det finns en möjlighet att en användare raderar alla användare och vi förblir utan åtkomst om vi inte direkt ändrar databasen och det är något oacceptabelt för vår applikation. För detta kommer vi att skapa ett speciellt evenemang igen, i det här fallet blir det före_förstör, vad gör det innan åtgärden utförs förstöra köra en metod.
Låt oss se koden:
 before_destroy: dont_destroy_dave def dont_destroy_dave höja "Can not destroy dave" if self.name == 'dave' end 

Sedan i vår raderaåtgärd kommer vi att fånga meddelandet och visa det, låt oss se åtgärdskoden:
 def delete_user id = params [: id] if id && user = User.find (id) begin user.destroy flash [: notice] = "Användare # {user.name} raderad" rescue flash [: notice] = "Can ' t radera användaren "end end redirect_to (: action =>: list_users) end 

Med detta avslutar vi vår handledning om begränsning av åtkomst till vår applikation, det är viktigt att täcka alla möjligheter för att förhindra att obehöriga användare ser eller ändrar vår administrativa del, detta för att undvika framtida huvudvärk och säkerhetsproblem som gör vår applikation osäker och instabil.Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng
wave wave wave wave wave