Съдържание
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
С това завършваме нашия урок за ограничаване на достъпа до нашето приложение, важно е да обхванем всички възможности за предотвратяване на неоторизирани потребители да видят или променят нашата административна част, това за да се избегнат бъдещи главоболия и проблеми със сигурността, които ще направят нашето приложение несигурно и нестабилно.Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка