Inhoudsopgave
In webapplicaties waar we privézones hebben waartoe alleen geregistreerde leden toegang mogen hebben, moeten we mechanismen implementeren waarmee gebruikers alleen kunnen zien wanneer ze zijn geverifieerd.De filters Het zijn instrumenten van Rails waarmee we oproepen naar methoden en acties kunnen onderscheppen, waardoor we onze methoden vóór, tijdens of na kunnen toevoegen, zodat we de stroom van de toepassing naar eigen goeddunken kunnen regelen om onze functionaliteiten te vervullen. In dit stadium gaan we de gebruiken voor filter om de oproepen naar onze acties te onderscheppen, op deze manier kunnen we de sessie verifiëren en weten of de gebruiker is ingelogd, zo niet, dan leiden we ze door naar waar we het hebben afgesproken. We gaan deze methode in onze applicatiecontroller plaatsen omdat het de basis is en op deze manier beschikbaar zal zijn voor de hele applicatie.
Laten we eens kijken naar de code die we ervoor hebben:
def autoriseren tenzij session [: user_id] flash [: notice] = "Log in" redirect_to (: controller => "login",: action => "login") end end
Omdat we zien dat de logica hierachter vrij eenvoudig is, gebruiken we Ruby's eigen voorwaardelijke, namelijk de behalve, dit stelt ons in staat om te stellen dat, tenzij aan de voorwaarde wordt voldaan, de code van het blok wordt uitgevoerd. Dus tenzij we een ID hebben van een gebruiker in sessie, zullen we hem omleiden en hem vragen om te authenticeren in de applicatie.
Nu gaan we in onze beheerderscontroller filteren en gebruikers vragen om te authenticeren:
class AdminController <ApplicationController before_filter: authorize
En in onze login-controller doen we ook iets soortgelijks, alleen zullen we de uitzondering toevoegen van de login-actie waarin we geïnteresseerd zijn en die door elke niet-geverifieerde gebruiker kan worden gezien:
class LoginController: login
Als we niet zijn ingelogd, zouden we zoiets als dit moeten zien bij het openen van de beheerpagina van de applicatie:
Nu hebben we de manier om toe te passen en te filteren dat gebruikers de administratieve panelen niet kunnen zien als ze niet zijn ingelogd, maar we hebben nog een laatste inconsistentie, in het deel van het elimineren van gebruikers moeten we voorkomen dat de algemene beheerder van de applicatie wordt verwijderd, want als we dat doen Als u het niet doet, bestaat de mogelijkheid dat een gebruiker alle gebruikers verwijdert en dat we geen toegang hebben, tenzij we de database rechtstreeks wijzigen en dit onaanvaardbaar is voor onze toepassing. Hiervoor gaan we weer een speciaal evenement creëren, in dit geval de before_destroy, wat doet dat voordat u de actie uitvoert? vernietigen een methode uitvoeren.
Laten we de code eens bekijken:
before_destroy: dont_destroy_dave def dont_destroy_dave raise "Kan dave niet vernietigen" if self.name == 'dave' end
Vervolgens zullen we in onze verwijderactie het bericht vastleggen en weergeven, laten we de actiecode bekijken:
def delete_user id = params [: id] if id && user = User.find (id) begin user.destroy flash [: notice] = "Gebruiker # {user.name} verwijderd" rescue flash [: notice] = "Can ' t verwijder die gebruiker "end end redirect_to (: action =>: list_users) end
Hiermee voltooien we onze tutorial over het beperken van de toegang tot onze applicatie, het is belangrijk om alle mogelijkheden te behandelen om te voorkomen dat onbevoegde gebruikers ons administratieve gedeelte zien of wijzigen, dit om toekomstige hoofdpijn en beveiligingsproblemen te voorkomen die onze applicatie onveilig en onstabiel maken.Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een positief punt te geven