【问题标题】:ActiveAdmin manage abilities of custom member_action with cancanActiveAdmin 使用 cancan 管理自定义 member_action 的能力
【发布时间】:2014-08-31 15:23:24
【问题描述】:

我正在使用 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 的能力。

【问题讨论】:

    标签: ruby-on-rails activeadmin cancan


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多