根据AdminUser模型限制ActiveAdmin的download_links

时间:2013-01-30 09:15:09

标签: ruby-on-rails activeadmin

我试图限制谁可以根据字段'limited'访问ActiveAdmin中的csv / json / ...导出。我想a)隐藏链接并且b)如果路径无论如何都不会返回任何内容

我尝试了以下内容:

index downloads_links: !current_admin_user.limited? do
  # ...
end

以及

csv do
  return if current_admin_user.limited?
  # ...
end

我也曾尝试使用过程和lambda,但这可能不是解决方案吗?

两者似乎都不起作用,并且分别在ActiveAdmin :: DSLResource和ActiveAdmin :: CSVBuilder上给我提供了nomethoderrors

欢迎任何提示,谢谢

1 个答案:

答案 0 :(得分:1)

我能用一个简单的猴子补丁实现这一目标,但我使用的是康康。 cancan帮助方法'可以吗?'工作正常,但我没有测试'current_admin_user'。拜托,试试吧

module ActiveAdmin
  module Views
    class PaginatedCollection
      def build_download_format_links(formats = self.class.formats)
        params = request.query_parameters.except :format, :commit
        links = formats.map { |format| link_to format.to_s.upcase, params: params, format: format }
        unless current_admin_user.limited?
          div :class => "download_links" do
            text_node [I18n.t('active_admin.download'), links].flatten.join(" ").html_safe
          end
        end
      end
    end
  end
end

UPD: 我已经尝试过current_admin_user,但它确实有效。

如果您需要限制格式,您可以使用“有限”方法重新定义此模块的格式方法:

module ActiveAdmin
    module Views
        class PaginatedCollection
            def formats
                if current_admin_user.limited?
                    @formats ||= [:csv] # anything you need for limited users
                else
                    @formats ||= [:csv, :xml, :json]
                end

                @formats.clone
            end
        end
    end
end