【问题标题】:Skip before filter with Active Admin在使用 Active Admin 进行过滤之前跳过
【发布时间】:2011-09-29 00:58:06
【问题描述】:

我正在使用设计并最近添加了活动管理员,它创建了一个单独的 admin_users 表来保留管理员。

当我尝试登录和浏览时,Active Admin 一切正常。但是,我的应用程序控制器为普通用户提供了此功能:

before_filter :authenticate_user!, :except => [:show, :index]

因此,在活动管理界面中,每当我尝试编辑或删除任何内容时,它都会要求我登录。我了解到可以在需要排除 before_filter 的控制器内部使用 skip_before_filter,但是 Active Admin 在控制器文件夹或我可以查看的项目中的任何地方都没有控制器文件。

谁能建议如何让活动管理员忽略我想应用于所有面向客户/用户的应用程序 beofre_filter?

【问题讨论】:

    标签: ruby-on-rails devise ruby-on-rails-3.1 before-filter activeadmin


    【解决方案1】:

    config/initializers/active_admin.rb 中可以添加以下内容:

    config.skip_before_action :authenticate_user!
    

    您也可以使用提供的 DSL 来修改 ActiveAdmin 控制器:http://activeadmin.info/docs/8-custom-actions.html#modify_the_controller

    注意:对于 5.0 之前的 Rails 版本,您需要使用 skip_before_filter

    【讨论】:

    • 由于某种原因,初始化程序文件中的行对我不起作用。我不确定。 .您在哪些文件中添加了修改 ActiveAdmin 控制器的代码?
    • @John 确保在更改任何初始化程序后重新启动应用程序,并且可以在管理定义文件(即 app/admin/post.rb)中使用控制器修改 DSL。
    • @coreyward,无法让它工作,发布了一个新问题:stackoverflow.com/questions/8903176/…
    • 看起来它与 ActiveAdmin 的关系不如设计。很高兴你弄明白了。 :)
    • 我正在尝试打电话给config.skip_after_filter,但得到的是:undefined method 'skip_after_filter' for #<ActiveAdmin::Application:0x007fa445d5c898
    【解决方案2】:

    我无法让@coreyward 的解决方案工作,但按照this Devise post 编辑config/application.rb 并添加:

    ActiveAdmin.register_page "Dashboard" do
        controller do
          skip_before_action :name_of_filter_to_skip
        end
    
        # Other code
    end
    

    admin/dashboard.rb 成功了。单独编辑config/application.rb 是行不通的。确保重启你的服务器!

    【讨论】:

    • 文档说配置步骤将配置添加到您的所有 RESOURCE 控制器,因此仪表板显然不在该列表中...直接转到 /admin/some_resouce 仍然为我跳过了一些事情。 ..所以你是对的,这是除了coreyward的解决方案之外还需要的
    【解决方案3】:

    corey 和 Sooie 都是对的……但只是部分地阻止了你的毯子 authorize_user!过滤掉影响 active_admin 你需要实现他们的两个答案...

    config/initializers/active_admin.rb

    config.skip_before_filter :authorize_user!
    

    app/admin/dashboard.rb

    controller do
      skip_before_filter :authorize_user!
    end
    

    【讨论】:

    • 为什么要同时实现?
    【解决方案4】:

    我无法使 @fringd 和 @coreyward 的解决方案在 Rails4 上工作(使用 ActiveAdmin 主分支)。

    所以,我已经将过滤器方法(我有两个过滤器:authorize_user!check_user_status)移动到一个新的关注点,并将这个创建的模块包含到具有这些过滤器的控制器中(除了ApplicationController,应该保持干净)。

    然后重启服务器,问题就解决了。

    【讨论】:

    • 能否为您描述的问题添加代码
    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多