私はWebアプリケーションでプリミティブなパーミッションシステムを実装しようとしています。あなたのコントローラでパーミッションをチェックする最良の方法を知りたいと思っています。私はアプリを書き始めたとき、私はもともとbefore_filterを使用することをお勧めだろうと思って、私のコードは次のようなものを見てしまった。このような何かを探して、私のフィルタとコントローラの権限チェックを行う最も良い方法。
before_filter :authenticate, :only => [:new, :create, :show, :edit, :update, :destroy, :delete]
before_filter :check_league_existence
before_filter :check_league_relation_existence, :except => [:new, :create, :index]
before_filter :check_ownership, :only => [:delete, :destroy]
before_filter :check_user_joinability, :only => [:new, :create]
before_filter :require_moderator, :only => [:edit, :update]
:
def check_league_relation_existence
raise ActiveRecord::RecordNotFound.new('Not Found') unless current_league_relation && current_league.league_relations.include?(current_league_relation)
end
def check_ownership
raise ActionController::RoutingError.new('You do not own this league relation. Permission Denied.') unless current_league_relation.user == current_user || current_user_league_relation.moderator?
end
を
このシステムはある程度機能しますが、いくつかの問題があります。 2つのうちの最大のものは、1)非常に多くのフィルタが存在するために何が起こっているのかを理解するのは難しい.2)不正なテストの際にエラーが常に検出されるため、機能テストを書く方法がわからないアクセス。権限を確認するためのよりよい方法については、誰もが提案していますか?
恐縮です、ありがとう!これは間違いなく改善になるでしょう。うまくいけば、それはすべてのテストの問題を修正します。 – Max