ActiveAdmin - 使用current_admin_user过滤可用的操作

时间:2012-07-28 19:37:49

标签: ruby-on-rails ruby activeadmin

我有一个像这样的活动管理资源:

ActiveAdmin.register Snippet do

  menu label: "Text Snippets"

  config.clear_sidebar_sections!

  index download_links: false do
    column :key if current_admin_user.developer?
    column :description
    column :contents
    default_actions
  end

  form do |f|
    f.inputs do
      f.input :description
      f.input :contents
    end
    f.buttons
  end

end

请注意,在index块中,如果当前管理员用户是开发人员,我只会添加key列。我想对可用的操作应用这种过滤。

我尝试在资源定义的顶部添加了这个:

actions current_admin_user.developer ? :all : :index, :edit

但我在NameError上获得current_admin_user。出于某种原因,在配置块之外,活动的admin current_admin_user帮助程序不存在。

那么,我怎样才能根据当前用户的权限进行过滤操作?

1 个答案:

答案 0 :(得分:6)

你必须使用proc ... current_admin_user仅在它正在运行的应用程序时起作用,而不是在你声明你的类时...

例如..

action_item :only => [:edit], :if => proc { current_admin_user.developer? } do
  #enter code here
end

您也可以将CanCan用于此..并在开头放置controller.authorize_resource。请查看activeadmin文档。

另一种方法是覆盖ActiveAdmin控制器中的action_methods ..就像这样

actions :all

controller do
  def action_methods
    if current_admin_user.developer?
      super
    else
      super - ['show', 'destroy', 'new', 'create']
    end
  end
end
如果你有多个角色,这很有用。

顺便说一句,你应该使用developer?而不是developer(如果我怀疑developer方法返回一个布尔值,则会偏离正确的程度)

<强>更新

在版本0.6+中你应该坚持使用CanCan,有关更多信息,请查看activeadmin文档http://www.activeadmin.info/docs/13-authorization-adapter.html#using_the_cancan_adapter