我使用带有活动管理员6.0的rails 3.2,我对活跃管理员用户,管理员和代理商有不同的角色,但我不希望代理能够导出数据csv。
如何根据用户是代理还是管理员隐藏所有下载链接?
答案 0 :(得分:3)
用proc可以用吗?方法
答案 1 :(得分:0)
你需要铁路link_to_if helper
。 仅在条件为真时才会显示您的链接
link_to_if(condition, name, options = {}, html_options = {}, &block)
<%= link_to_if(@current_user.nil?, "Login", { controller: "sessions", action: "new" }) %>
# If the user isn't logged in...
# => <a href="/sessions/new/">Login</a>
答案 2 :(得分:0)
这对我有用......
我不得不按照以下方式修补ActiveAdmin:
# config/initializers/activeadmin_cancan.rb
module ActiveAdmin
module ViewHelpers
module DownloadFormatLinksHelper
def build_download_format_links(formats = self.class.formats)
if current_admin_user.can_download_resources?
links = formats.collect do |format|
link_to format.to_s.upcase, { :format => format}.merge(request.query_parameters.except(:commit, :format))
end
div :class => "download_links" do
text_node [I18n.t('active_admin.download'), links].flatten.join(" ").html_safe
end
end
end
end
end
end
只要您的用户使用上述内容即可。下载csv文件的能力不依赖于资源(例如,一些用户可以下载Foo,其他用户可以下载Bar)或格式化。
答案 3 :(得分:0)
使用当前的activeadmin版本(1.1.0),您可以执行以下操作:
# file: app/admin/user.rb
index download_links: proc { authorized?(:export_csv, User) ? [:csv] : false } do
# ...
end
并在您的能力文件中(例如CanCan):
class Ability
include CanCan::Ability
def initialize(admin)
can :export_csv, User if admin.superadmin?
end
end
答案 4 :(得分:0)
以下内容在active_admin.rb
config.namespace :admin do |admin|
# authorized? is an ActiveAdmin method that delegates to CanCan's can? method
admin.download_links = proc { authorized?(:view_download_links, collection.klass) }
end
然后,您只需要在ability.rb
中定义一个功能(将MyModelClass
替换为您的模型名称):
class Ability
include CanCan::Ability
def initialize(user)
...
can [:view_download_links], MyModelClass
end
end
使用activeadmin 1.4.2和cancancan 2.3.0