継承されたリソースで cancan を使用していますが、奇妙な問題 (バグの可能性がありますか?) が発生しています。ユーザーの編集権限を定義すると、突然、権限が false を返すにもかかわらず /edit アクションへのアクセスが承認されます。だからここに私が経験している行動があります。
class VenuesController < ApplicationController
inherit_resources
authorize_resource
end
アビリティが定義されていない場合、管理者以外のユーザーは /venues/1/edit からホームページにリダイレクトされます。ただし、:update アビリティを定義すると、そのアビリティが true を返すか false を返すかにリダイレクトされません。私が定義したい能力は次のとおりです。
アビリティ.rb
can :update, Venue do |venue|
venue.admin_ids.map{|a| a.to_s}.include? user.id.to_s
end
これは、テストとビュー内の健全性チェックで確認できるように、正しい値を返します。
会場/edit.html.haml
= can? :update, @venue
#returns false
したがって、編集アクション内にいて、ビューに「更新できません」と表示されている場合、このページからリダイレクトされることはありませんか? 二重の健全性チェックとして、私は試しました
can :update, Venue do |venue|
false
end
それでも運がありません...アビリティの定義がまったくなくてもリダイレクトされるのは奇妙ですが、falseを返すアビリティを定義すると、ビューレイヤーが編集できないことを適切に伝えているにもかかわらず、リダイレクトされません。何か案は?これはバグですか?私は何か間違ったことをしていますか?
さらに、編集アクションを確認できるだけでなく、実際にリソースに put リクエストを送信してリソースを保存できます。