2011-02-11 14 views
1

の権限の定義:はカンカンレール - 私は2つのモデル持っているネストされたモデル

can :create, ThreadParticipation if the user is a ThreadParticipation 

例:

for 
    thread: (1, 'hello world') 
    thread_participation: (313, 1, 13) -- where 13 is the user_id 

私が試した

Thread (id, title) 
ThreadParticipation (id, thread_id, user_id) 

を私は次のように定義したいです:

can :create, ThreadParticipation, :thread_participations => { :user_id => current_user.id } 

しかし、そのエラー。何か案は?

+1

のプロパティですが、それは非常に非常に非常に非常に非常に重大なエラーましたか? :D何かエラーメッセージなしで診断するのは難しいです! – Zabba

答えて

0

私は現在、いくつかの類似を達成しようとしていますが、私はこれについて全視野を持っていません。また、これはブロックせずに動作するはずです

can :create, ThreadParticipation => Thread, do |participation, thread| 
    # your definition here 
end 

:これを試してみてください。

EDIT:CanCanでまだ動作しない上記の部分を削除します。自分のソリューションを実装しましたが、手動でコントローラーの操作を承認する必要があります。これは美しいものではなく、私の意見ではより安全です。

私は私のプロジェクトのために、このようにそれを実装:それはRubyで定義されたThreadクラスと衝突するので、一般的には https://gist.github.com/822208

+0

ありがとう、私は混乱しています。これはCanCanのサポートですか?私は本当により複雑なものを追加したCanCanソリューションを探しています... – AnApprentice

+0

CanCanは、現時点ではネストされたリソース(IMO)をサポートしていません。要点のソリューションはCanCanソリューションで、もう一度見てみましょう。私はちょうど缶を使わない? ...私の見解では、user_ability.can?なぜですか? 1つの引数(current_userなど)を取ることしかできません。あなた自身で能力をつくることができます。私の例のように、より多くのものを定義することができます。 – pduersteler

1

Threadは、ちょうど悪いモデル名です。最近私はこれを実装しました。私の例では、フォーラムとトピックがあります。読者がアクセスできないフォーラムに新しいトピックを作成することはできません。

can :create_topic, Forem::Forum do |forum| 
    can?(:read, forum) && user.can_create_forem_topics?(forum) 
end 

can_create_forem_topics?はちょうどこのようUserモデルに定義されています:

def can_create_forem_topics?(forum) 
    # code goes here 
end 

は、その後、私はちょうどこのカスタムを使用して、私はフォーラムのオブジェクトのカスタムパーミッションを定義し

は、このために create_topicと呼ばれます :create_topic能力が newcreateの私の TopicsControllerにあります。 @forumはで定義されています3210:

authorize! :create_topic, @forum 

そして、私はビューでそれを使用する必要がある場合:親オブジェクトのカスタム許可を定義することによって

can? :create_topic, @forum 

0

通常は、ユーザー

user 
だろう

not current_user

能力内。これはあなたのエラーですか?あなたの能力は間違って指定されています。あなたは欲しいこと

can :create, ThreadParticipation, :user_id => user.id 

注:user_idをはThreadParticipationモデル

関連する問題