ActiveAdmin使用cancan管理自定义member_action的功能

时间:2014-08-31 15:23:24

标签: ruby-on-rails activeadmin cancan

我正在使用ActiveAdmin,Devise和CanCan开展rails项目。

我想做的是检查自定义member_action与cancan的能力。喜欢这个

def initialize(admin_user)
  can :read, ModelA
  can [:disable,:reset], ModelA if admin_user.has_edit_ability?
end

第二个'可以'线不起作用。


以下是我项目中的相关代码。我在ActiveAdmin中添加了两个成员操作。

ActiveAdmin.register ModelA do
  def member_action :disable, :method => :post do
     ...
  end
  def member_action :reset, :method => :post do
     ...
  end
  ...
  index do
    ...
    actions do |m|
      link_to 'disable', disable_admin_model_a_path(m.id)
      link_to 'reset', reset_admin_model_a_path(m.id)
    end
  end
end

管理员用户的类是AdminUser。 AdminAbility在admin_user.rb

中定义
class AdminAbility
  include CanCan::Ability
  def initialize(admin_user)
    can :read, ModelA
    can [:disable,:reset], ModelA if admin_user.has_edit_ability?
  end
end

我意识到ActiveAdmin可能不支持它。我想知道我是否可以通过添加其他代码使其工作,或者我应该以其他方式检查自定义member_action的能力。

1 个答案:

答案 0 :(得分:1)

看起来你应该手动完成,例如:

ActiveAdmin.register ModelA do
  def member_action :disable, :method => :post do
    authorize! :disable, @instance_for_modela
    ...
  end
  def member_action :reset, :method => :post do
    authorize! :reset, @instance_for_modela
     ...
  end
  ...
  index do
    ...
    actions do |m|
      link_to 'disable', disable_admin_model_a_path(m.id) if authorized?(:disable, m)
      link_to 'reset', reset_admin_model_a_path(m.id) if authorized?(:reset, m)
    end
  end
end