2011-01-26 97 views
1

我正在做一個user模型的檢查,以確定他/她是否有一個或多個task_list,如果她有多個task_list只允許她刪除它,否則會引發異常。我基本上叫delete_list用戶模型的方法,以允許短手的缺失,如user1.delete_list(list1)Rails授權?檢查模型vs控制器

我辯論是否將在慘慘檢查哪裏會濾波器之前應用的控制器上,或者是否有它在用戶模型中也是如此。建議的做法是什麼?

回答

1

我認爲一個很好的DRY方法是在你的模型中創建一個測試是否允許刪除的方法。然後從你的控制器或從ability.rb使用該方法。恕我直言,我認爲如果將來有可能更改爲不同的許可系統,那麼從CanCan中解脫出來的複雜權限/業務邏輯會更好。

在你的模型:

def can_destroy_list(list) 
    ... Do check here .... 
end 

在ability.rb

can :destroy, List do |list| 
    user.can_destroy_list(list) 
end 

你的控制器和視圖可以,如果隨後也直接使用can_destroy_list的模型實例nessary或使用:如果can? :destroy, @list