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 ヘルパー メソッド 'can?' うまくいきましたが、「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 に答える