rails_authorization_pluginを起動してモデルで実行しています。
私のサイトに権限チェックを実装するための最良の方法は何ですか?
オブジェクトのインスタンスを表示する必要がある場合の複雑な条件がありますが、返されたデータをループしてフィルタリングした結果として、複数のデータセットをフェッチしてDBをグラインドしないように、それらをチェーン化する効率的な方法はありますか?
rails_authorization_pluginを起動してモデルで実行しています。
私のサイトに権限チェックを実装するための最良の方法は何ですか?
オブジェクトのインスタンスを表示する必要がある場合の複雑な条件がありますが、返されたデータをループしてフィルタリングした結果として、複数のデータセットをフェッチしてDBをグラインドしないように、それらをチェーン化する効率的な方法はありますか?
効率的な方法があります。クエリを 1 つだけ実行し、実行したクエリが必要なオブジェクトを正確に返すようにします。もちろん、言うは易く行うは難しです。
これを処理する 1 つの方法は、スコープを使用して条件を構築することです。
@posts = @thread.posts.not_deleted.this_week.not_secret
これらすべてのメソッドがスコープである場合、それは 1 つのクエリのみになります。
条件が複雑すぎてスコープを簡単に作成できない場合は、おそらく、ユーザーに表示されるオブジェクトを返すメソッドを作成する必要があります。
class User
def posts_for(thread)
if is_admin?
thread.posts
elsif thread.owner == self
thread.posts.not_deleted
else
Post.find(:all, :conditions => something_complicated(thread, self))
end
end
end
私のアプリケーションには多くの種類のオブジェクトと非常に複雑なパーミッションがあるため、そのような呼び出しを method_missing でキャプチャし、さまざまなクエリをすべて作成する方法を知っているパーミッション ライブラリにそれらをルーティングします。