【问题标题】:How before_filter work in rails?before_filter 如何在 Rails 中工作?
【发布时间】:2013-12-18 05:12:09
【问题描述】:

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

我如何控制用户的访问权限,以便用户只能访问关于页面,但除非他们登录,否则他们无法访问项目页面。 还有当这个 before_filter 被调用还是被自动调用?我检查了 Rails 文档,但那里什么也没有。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    重要的是要知道过滤器可以堆叠。我的意思是,如果 WheteverController

    顺便说一下,before_filters 可以接收一个参数: - 仅 [:methods_affected] - 除了[:methods_excluded]

    【讨论】:

    • 那么,如果 WheteverController 中有 4 个方法并且如果调用了 4 个方法中的任何一个,我的过滤器将被执行吗?也就是说,如果调用了所有 4 个方法,那么在 filter 将执行 4 次之前?
    • 是的,在每个方法调用中执行一个过滤器
    【解决方案2】:

    这里是过滤器的一些解释,http://guides.rubyonrails.org/action_controller_overview.html#filters

    简而言之,它的作用是在控制器中的每个操作之前执行方法authorize,在这种情况下,如果您的authorize方法没有登录,它将重定向到登录,所以它不会'不能做任何动作

    【讨论】:

      【解决方案3】:

      如果你按照你写的那样使用它,那么authorize 方法将为每个请求执行。您可以检查request 对象,检查当前控制器和动作,并在那里放置一些条件。

      【讨论】:

        猜你喜欢
        • 2011-08-18
        • 2011-01-24
        • 1970-01-01
        • 2011-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多