ActiveAdmin通过cancan管理自定义member_action的功能



我正在使用ActiveAdmin、Devise和CanCan进行rails项目。

我想做的是用cancan检查自定义member_action的能力。像这个

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

第二行"can"不起作用。


以下是我的项目中的相关代码。我在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的能力。

看起来你应该手动完成,类似于:

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

最新更新