Съдържание
В уеб приложения, където имаме частни зони, до които трябва да имат достъп само регистрирани членове, трябва да внедрим механизми, които позволяват на потребителите да виждат само след като са удостоверени.The филтри Те са инструменти на Релси които ни позволяват да прихващаме извиквания към методи и действия, което ни позволява да добавяме нашите методи преди, по време или след, така че да можем да контролираме потока на приложението, както сметнем за добре, за да изпълним нашите функционалности. На този етап ще използваме преди филтър за да прихванем обажданията към нашите действия, по този начин можем да проверим сесията и да знаем дали потребителят е влязъл, ако не, тогава ние ги пренасочваме където и да сме уредили. Ще поставим този метод в нашия контролер на приложения, тъй като той е основата и по този начин той ще бъде достъпен за цялото приложение.
Нека да видим кода, който имаме за него:
def разреши, освен ако сесията [: user_id] flash [: notice] = "Моля, влезте" redirect_to (: controller => "login" ,: action => "login") end end
Както виждаме логиката зад това е доста проста, използваме собственото условно на Ruby, което е освен ако, това ни позволява да поставим условие, че ако условието не е изпълнено, кодът на блока се изпълнява. Така че, освен ако нямаме идентификатор на потребител в сесия, ще го пренасочим и ще го помолим да се удостовери в приложението.
Сега в нашия администраторски контролер ще филтрираме и ще помолим потребителите да се удостоверят:
клас AdminController <ApplicationController before_filter: разреши
И в нашия контролер за вход ние също правим нещо подобно, само че ще добавим изключението от действието за вход, което е това, което ни интересува, което може да бъде видяно от всеки неудостоверен потребител:
клас LoginController: вход
Ако не сме влезли, трябва да видим нещо подобно при достъп до административната страница на приложението:
Сега имаме начин да приложим и филтрираме, че потребителите не могат да виждат административните панели, ако не са влезли, но имаме едно последно несъответствие, в частта за премахване на потребители трябва да избягваме изтриването на общия администратор на приложението, тъй като ако го направим не го правете, съществува възможност потребителят да изтрие всички потребители и да останем без достъп, освен ако не променим директно базата данни и това е нещо неприемливо за нашето приложение. За целта отново ще създадем специално събитие, в този случай това ще бъде преди_унищожи, какво прави това, преди да извършите действието унищожи стартирайте метод.
Нека да видим кода:
before_destroy: dont_destroy_dave def dont_destroy_dave повдигане "Не може да унищожи dave" ако self.name == 'dave' край
След това в нашето действие за изтриване ще заснемем съобщението и ще го покажем, нека видим кода на действието:
def delete_user id = params [: id] if id && user = User.find (id) start user.destroy flash [: notice] = "Потребител # {user.name} изтрит" спасителна флашка [: notice] = "Can ' t изтрийте този потребител "end end redirect_to (: action =>: list_users) end
С това завършваме нашия урок за ограничаване на достъпа до нашето приложение, важно е да обхванем всички възможности за предотвратяване на неоторизирани потребители да видят или променят нашата административна част, това за да се избегнат бъдещи главоболия и проблеми със сигурността, които ще направят нашето приложение несигурно и нестабилно.Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка