到目前为止,这种组合设置中的大部分内容都运行良好。但是,当我尝试有条件地禁用过滤器时,它们总是被启用。我的场景是(或多或少)我想给Restaurant
所有者(AdminUser
具有角色的 s :restaurateur
)部分访问权限:他们只能编辑自己的餐厅,我也想对他们隐藏一些字段。这行得通。但禁用过滤器不会。让我详细说明:
# app/admin/restaurants.rb
batch_action :activate, :if => proc { can? :activate, Restaurant } do |list|
#...
end
controller do
def current_ability
@current_ability ||= Ability.new(current_admin_user)
end
end
index do
...
column :city if can? :manage, Restaurant # This works well.
end
filter :city, :if => proc { can? :manage, Restaurant } # This is always there.
Ability
: _
# app/models/ability.rb
if user.has_role? :admin
can :manage, :all
elsif user.has_role? :restaurateur
cannot :manage, Restaurant
这是我在 Rails 控制台中看到的内容:
admin = AdminUser.find(1) # roles => [:admin]
restorateur = AdminUser.find(2) # roles => [:restaurateur]
Ability.new(admin).can?(:manage, Restaurant) # true
Ability.new(restorateur).can?(:manage, Restaurant) # false
我知道我并没有以最好的方式使用它,比如使用:manage
在常见情况下不打算提供部分访问的动词。但它可以工作,除了禁用过滤器。
和
有什么特别的我应该做的,所以这些确实有效吗?
Rolify 位于3.2.0
. CanCan 在1.6.8
. ActiveAdmin 处于此 GIT 修订版:b0dd8fdcfbd68984a8c2ec7f2279a121eeb66c3d
. 如果我将它更新到最新的 GIT 版本(或官方 0.5.0 版本),batch_action
s 总是被禁用!(因此他们也禁用了selectable_column
。)
关于我的问题:
是否有任何可靠的方法来测试 ActiveAdmin 文件中的能力?也许实例化能力的方式给他们提供了错误的用户(我的意思是在检查过滤器:if
Proc 之前)?can?
在这种情况下,助手如何获得实例化的能力,我几乎不知道。
和
如果我的方式不正确,有条件地禁用过滤器的推荐方式是什么?
和
任何人都知道为什么 ActiveAdmin 的最新版本似乎完全忽略了批处理操作?也许我应该把积木放在controller do
积木之前batch_action
?
谢谢你的时间。