私は、ロールベースのアクセス制御(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コミュニティに取り組まれることはほとんどありませんか?
応答のおかげでジェイソン。この方法でわかる課題は、ユーザーがメンバーでない限り、サイト全体のすべての投稿が表示されなくなることです。保護されていないグループに誰かが投稿を作成した場合、 "user.is_member_of_group?"ロジックを避ける必要があります。それを避けるために、各投稿レコードに:group_idフィールドを持つことができたと思います。 post.has_group?上記で提案したメンバーシップ・テストを使用することができます。私はCanCanで多くの経験を持っていませんが、どうにかしてポストインスタンスを "can:action、:model do .... end"というテストに入れられますか? –
私はあなたが欲しいものをテストするでしょう。 https://github.com/ryanb/cancan/blob/master/spec/cancan/model_adapters/active_record_adapter_spec.rbから始めてください。私はあなたができることができると思います:view_post、Post.protected以外の投稿?誰もがそれを見ることができるだろう、それからあなたはPost.protectedを持っていますか?元のポスターが保護されたグループに含まれているかどうかを確認し、true/falseを返します。 –
もう一度、あなたが望むものを試してみることを強くお勧めします。 https://github.com/ryanb/cancan/blob/master/spec/cancan/model_adapters/active_record_adapter_spec.rbの88行目を見て、彼は4つの記事を作成し、特定の記事を見ることができることを確認します。 –