2010-08-13 55 views
4

我使用CanCan來檢查用戶權限,併爲我的用戶有條件地顯示或取消頁面內容。我想,雖然我的緩存頁面,甚至與分段緩存不能找到一個很好的解決方案...例如:Rails - 基於緩存和權限的視圖

cache do 

# much code 

    if can? 
    # little code 
    else 
    # little code 

# much code 

    if can? 
    # little code 
    else 
    # little code 

# much code 

當然我並不孤單,有做到這一點的好辦法。這裏通常認爲什麼是最佳做法?

非常感謝您的意見。

回答

4

我還沒有嘗試過,但可能會很快。我可能採取的方法是根據相關模型和當前用戶顯式分配緩存鍵。該片段將爲每個用戶分別緩存,但每個用戶只能緩存一次。

嘗試這方面的一些變化:

cache ["Unique fragment label", @model.cache_key, current_user.cache_key].join do 
    # code with and without permissioned elements 
end 

爲了確保權限更改緩存失效,確保這樣的變化觸摸用戶模型的updated_at時間戳。假設權限存儲在單獨的模型中:

class Permission < ActiveRecord::Base 
    belongs_to :user, :touch => true 
end