2009-07-07 10 views
2

私はモデルでrails_authorization_pluginを稼働させています。いつ、どこでACLを実装するのですか

私のサイトで許可チェックを実装する最も良い方法は何ですか?

私は、オブジェクトのインスタンスを表示する必要があるときに複雑な条件を持っています。それらを連鎖させる効率的な方法があるので、データの複数のセットを取得せず、返されたデータそれをフィルタリングするには?

答えて

1

効率的な方法があります: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でそのような呼び出しをキャプチャし、すべての様々なクエリを作成する方法を知っている許可ライブラリーへのルートそれらを。

+0

まあ、私は非常に簡潔なレールaclプラグインを使用していますが、私はチェーンで使用できるとは思いませんか? activerecordの拡張機能のように動作するACLプラグインはありますか? rails aclのドキュメントは、始めるには多大な労力を要しますが、実際にセキュリティチェックを実装すると、私には多くの推測が残されます。 あなたの助けをありがとう、本当にここで本当に良いアドバイスを! –

+0

どのライブラリを使用しているのかわかりません。おそらくリンクしていますか?私は本当に許可ライブラリの分野を知らない。ロールにはアプリケーションレベルの粒度ではなくオブジェクトレベルの細分性があるため、私自身のアクセス許可ライブラリをロールしました。そのため、そこにあるプラグインは実際にはうまくいきませんでした。 –

+0

rails_acl_pluginをチェックしましたか? インスタンス、クラス、およびメソッドレベルのアクセス許可を行います。 –

関連する問題