これまでのところ、この組み合わせたセットアップのほとんどのものは十分に機能します。ただし、条件付きでフィルターを無効にしようとすると、フィルターは常に有効になります。私のシナリオは、(多かれ少なかれ)Restaurant
所有者(AdminUser
の役割を持つ: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
常に無効になります!(したがって、それらも無効にselectable_column
します。)
私の質問に:
ActiveAdminのファイル内の能力をテストする信頼できる方法はありますか?おそらく、アビリティがインスタンス化される方法は、間違ったユーザーにフィードします(つまり、フィルター:if
Procをチェックする前に)?can?
この場合、ヘルパーがどのようにしてアビリティをインスタンス化するのか、私はほとんど迷っていません。
と
私の方法が正しくない場合、条件付きでフィルターを無効にする推奨される方法は何ですか?
と
ActiveAdminの最新バージョンがバッチアクションを完全に無視しているように見える理由を知っている人はいますか?たぶん私はブロックの前にブロックを置くcontroller do
べきですかbatch_action
?
御時間ありがとうございます。