4

나는 CanCan을 사용하여 사용자 권한을 확인하고 사용자에게 조건부로 페이지 내용을 표시하거나 표시하지 않습니다. 그래도 난 내 페이지를 캐시 할, 심지어 조각 캐싱과 우아한 솔루션 ... 예를 찾을 수 없습니다 :레일 캐싱 및 권한 기반보기

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 
관련 문제