2012-03-08 11 views
0

問題は2つのモデルがあります - ProjectとTicket(プロジェクトに属します)。プロジェクトの有効期限が切れたときにチケットの作成にアクセスすることを拒否したい(つまり、期限切れのプロジェクトの新しいチケットを作成できないようにしたい)CanCanの能力の範囲内で他のクラスインスタンスを呼び出すことは可能ですか?

CanCan Abilityでユーザー用のチケットの作成を拒否することはできますか?

if user.role? :superuser 
    can :read, :all 
    can :create, Ticket do |ticket| 
    ticket.project.expired? 
    end 
end 

よう 何か問題が方法がどこにも定義されていない「プロジェクト」です。 私はいくつかの助けに感謝します。

答えて

2

許可を与える前に、潜在的なチケットのプロジェクトが期限切れになっているかどうかをテストするだけで済みます。プロジェクトのチケットではなく、そのパーミッションが付与されていることが重要です。私はおそらく特殊能力を定義するだろう。このために

...

if user.role? :superuser 
    can :read, :all 
    can :create_ticket_for_project, Project do |project| 
    !project.expired? 
    end 
end 

は、その後、あなたのコントローラ内でそれを使用:これは実際に私の問題を解決し

authorize! :create_ticket_for_project, @project 
+0

。どうもありがとう。私はCanCanの能力の動作をコントローラの動作とは異なる名前にすることはできないと考えました。 –

関連する問題