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