2011-12-03 9 views
0

私は、ロールベースのアクセス制御(cancan、cantangoなど)のためのかなりの宝石オプションを見ています。しかし、私はグループメンバーシップベースのアクセス制御のための宝石を見つけていません。ここで私が達成しようとしているものの単純化した説明です:Railsでのグループメンバーシップベースのアクセス制御のオプションは何ですか?

Users: a, b, c, d 
Groups: y, z 
Group Membership: y has a and b; z has c and d 
Posts: m, n 
Ownership: a owns m; c owns n 

Group y is marked as a public group. m can be seen by all users 
Group z is marked as a private group. n can only be seen by c and d 

だから、あまりにも空想や複雑な何も、システムへのアクセス制御をファイルに類似した基本的機能(例えば、所有者・グループ・公共の間で読み書きを実行していません[もちろん実行しないで]

ページレベルのグループメンバーシップアクセスコントロールを提供できるRadiant(いくつかの追加のプラグインを含む)のように見えますが、私はCMS全体を必要としたくありません。私は、モデルベース(cancanのようなもの)対ページ/パスベースのものを好むでしょう。 (私のユーザモデルにDeviseを使用しています - 私が見逃したDeviseには何かありますか?)

Railsにはプライベート/パブリックのユーザーグループがどのように実装されていますか? RailsベースのCMSを介してのみですか?私は何か基本的なものを欠いていますあるいは、このユースケースはRailsコミュニティに取り組まれることはほとんどありませんか?

答えて

1

を私はこのための答えを見つけたと、私は他の誰がそれを探している場合にはそれを投稿だろうと思いました。

CanCanは、「ハッシュオブコンディション」でグループ機能をサポートしています。考えは、post:group_idbelongs_toa group)とusershas_manygroupsとタグ付けされています。次のように、あなたはcan文の中で「条件のハッシュ」を設定することができます。

can :manage, Post, :group => { :id => user.group_ids } 

「条件のハッシュは、」ここでさらに文書化されています

https://github.com/ryanb/cancan/wiki/Defining-Abilities

感謝を@Jason_Nobleにするために私が最終的にそれを見つけた場所のcancanドキュメントに私を向ける。

p.s. 1つの実装ノート。いくつかの投稿を公開し、いくつかの投稿を非公開にしたい場合は、各ユーザが会員であるデフォルトのグループを設定することができます。すべてのパブリックポストは、デフォルトのgroup_idでタグ付けされます。

0

私はカンカンを使用してのようなものだろう:

can :view_post, User if user.is_member_of_group?(z) 
+0

応答のおかげでジェイソン。この方法でわかる課題は、ユーザーがメンバーでない限り、サイト全体のすべての投稿が表示されなくなることです。保護されていないグループに誰かが投稿を作成した場合、 "user.is_member_of_group?"ロジックを避ける必要があります。それを避けるために、各投稿レコードに:group_idフィールドを持つことができたと思います。 post.has_group?上記で提案したメンバーシップ・テストを使用することができます。私はCanCanで多くの経験を持っていませんが、どうにかしてポストインスタンスを "can:action、:model do .... end"というテストに入れられますか? –

+1

私はあなたが欲しいものをテストするでしょう。 https://github.com/ryanb/cancan/blob/master/spec/cancan/model_adapters/active_record_adapter_spec.rbから始めてください。私はあなたができることができると思います:view_post、Post.protected以外の投稿?誰もがそれを見ることができるだろう、それからあなたはPost.protectedを持っていますか?元のポスターが保護されたグループに含まれているかどうかを確認し、true/falseを返します。 –

+1

もう一度、あなたが望むものを試してみることを強くお勧めします。 https://github.com/ryanb/cancan/blob/master/spec/cancan/model_adapters/active_record_adapter_spec.rbの88行目を見て、彼は4つの記事を作成し、特定の記事を見ることができることを確認します。 –

関連する問題