更新:閱讀的答案後,我覺得我應該改一下我的問題(如問題3)在Cancan中編寫規則或模型驗證?
不時我感到困惑的地方,我應該寫一些有條件的檢查:在慘慘能力或在ActiveRecord
模型驗證?
作爲第一個例子:說我有一個可以嵌套的文件夾模型。如果它是父文件夾的唯一子項,我想防止刪除它。
這應該可能是模型邏輯(作爲before_destroy回調)。不過,我也想隱藏刪除按鈕(和塊控制器操作),這看起來像康康的領域。
作爲第二個例子:我想防止刪除不屬於我的文件夾。
這將需要使用存儲在會話中的current_user
。我的印象是會話相關條件不應該觸及模型本身,所以這是針對康康的。這是對的嗎?
問題3:
如果刪除文件夾既需要:
- CURRENT_USER是所有者檢查(寫爲慘慘能力)
- 文件夾是不是唯一的孩子檢查(寫在型號爲
destroyable?()
)
Cancan能力還應該叫model.destroyable?()
,還是我應該分別撥打model.destroyable?()
(在視圖和控制器中)?
+1明確提及服務器端認證檢查仍然是必需的,儘管cancan(ahem)可以使其基本不可見。它們都是一樣的(重新混合)認證邏輯。 – 2013-04-25 02:44:08
因此對於我編輯的新的第三個問題,你會在cancan能力中調用model.destroyable?()嗎? – lulalala 2013-04-26 01:41:43