2

我试图根据字段“受限”限制谁可以访问 ActiveAdmin 中的 csv/json/... 导出。我想a)隐藏链接和b)如果路径无论如何都会被击中,什么也不返回

我尝试了以下方法:

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

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

我也简单地尝试过使用 procs 和 lambda,但这可能也不是这里的解决方案?

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

欢迎任何提示,谢谢

4

1 回答 1

1

我可以通过一个简单的猴子补丁来实现这一点,但我使用的是 cancan。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
于 2013-11-01T08:42:06.647 回答