Rails - 基于缓存和权限的视图

时间:2010-08-13 18:20:11

标签: ruby-on-rails caching permissions cancan fragment-caching

我使用CanCan来检查用户权限,并为我的用户有条件地显示或禁止页面内容。我想缓存我的页面,即使使用片段缓存也无法找到优雅的解决方案......例如:

cache do

# much code

  if can?
    # little code
  else
    # little code

# much code

  if can?
    # little code
  else
    # little code

# much code

当然,我并不孤单,这是一个很好的方法。什么通常被认为是最好的做法?

非常感谢您的意见。

1 个答案:

答案 0 :(得分: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