before_filter如何在rails中工作。假设在ApplicationController中我有以下代码
class ApplicationController < ActionController::Base
before_filter :authorize
def authorize
unless User.find_by_id(session[:user_id])
redirect_to login_url, :notice => "Please log in"
end
end
如何控制用户访问权限,以便用户只能访问about页面,但除非他们已登录,否则无法访问项目页面。 当这个before_filter被调用或被自动调用时?我检查了rails文档,但那里什么都没有。
答案 0 :(得分:0)
这里有一些过滤器的解释,http://guides.rubyonrails.org/action_controller_overview.html#filters
简而言之,它会做什么,它将在控制器中的每个操作之前执行方法authorize
,在这种情况下,如果未登录,您的authorize
方法将重定向到登录,所以它将无法采取任何行动
答案 1 :(得分:0)
如果您使用了这个,那么将为每个请求执行authorize
方法。您可以检查request
对象,检查当前控制器和操作,并在那里设置一些条件。
答案 2 :(得分:0)
重要的是要知道过滤器可以堆叠。我的意思是,如果 WheteverController&lt; ApplicationController的 如果在ApplicationController中创建过滤器,则会在WheteverController中的任何方法之前执行。如果你想用一行授权所有应用程序,这很好。
顺便说一句,before_filters可以接收参数: - 仅[:methods_affected] - 除了[:methods_excluded]