2011-08-17 12 views
4

私は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)不正なテストの際にエラーが常に検出されるため、機能テストを書く方法がわからないアクセス。権限を確認するためのよりよい方法については、誰もが提案していますか?

答えて

7

個人的には、既存の認可フレームワークの1つを使用することをお勧めします。それはあなたに多くの時間と頭痛を節約します。そうでない場合は、あなたのコードは本当に厄介取得、

Rails Authorization

はあなたが言ったように:Rubyのツールボックスを見てみましょう。また、後で追加の権限を持つロールを追加することも非常に困難です。たとえば、特定のチェックを無効にする管理者ロールを追加するとします。

私はdeclarative_authorizationだけでなく、非常に良い解決策に思えるカンカンで成功を収めてきました。ここで

は、両方のフレームワークのために良いスクリーンキャストです:

PS:authentication frameworksはあまりにも、あなたに興味があります。

+0

恐縮です、ありがとう!これは間違いなく改善になるでしょう。うまくいけば、それはすべてのテストの問題を修正します。 – Max

関連する問題