2012-03-08 123 views
0

問題是我有兩個模型 - 項目和票務(屬於項目)。我想在項目過期時拒絕創建票據(即,我希望用戶無法爲過期的項目創建新票證)。可以在CanCan中調用其他類實例嗎?

如何拒絕爲CanCan能力中的用戶創建票證? 喜歡的東西

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能力中的行動可以與控制器中的行動命名不同。 – 2012-03-08 14:56:05

相關問題