俄罗斯娃娃缓存和隐藏敏感链接

时间:2015-02-07 20:45:52

标签: ruby-on-rails caching

我们如何隐藏敏感或用户特定的链接,例如'编辑'或者'删除'缓存视图时按钮?

使用缓存时,您无法真正使用条件,例如:

<% if current_user.can? edit %>
  <%= link_to 'Edit', edit_post_path(@post) %>
<% end %>

因为所有观看者都会被提供相同的页面。

一些教程告诉我,我可以使用CSS:

<% if current_user.can? edit %>
  <%= link_to 'Edit', edit_post_path(@post), class: 'admin-link' %>
<% end %>

但是我该如何验证编辑权限?

1 个答案:

答案 0 :(得分:2)

您可以在缓存键中添加该部分,例如

<% cache [@post, current_user.can? :edit] do %>
  <% if current_user.can? edit %>
     <%= link_to 'Edit', edit_post_path(@post) %>
  <% end %>
<% end %>

只需确保处理用户未登录的部分,您可以将其发送到控制器的变量中,例如

@can_edit = user_signed_in? && current_user.can? :edit

然后在视图中它将成为

<% cache [@post, @can_edit] do %>

这样rails会生成两个缓存,一个用于可以编辑的人,另一个用于那些无法编辑的缓存,并为正确的用户渲染每个缓存。