簡體   English   中英

ActiveAdmin使用Cancan管理自定義member_action的功能

[英]ActiveAdmin manage abilities of custom member_action with cancan

我正在使用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

第二條“可以”行不起作用。


以下是我項目中的相關代碼。 我在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

admin用戶的類別為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM