我们如何隐藏敏感或用户特定的链接,例如'编辑'或者'删除'缓存视图时按钮?
使用缓存时,您无法真正使用条件,例如:
<% 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 %>
但是我该如何验证编辑权限?
答案 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会生成两个缓存,一个用于可以编辑的人,另一个用于那些无法编辑的缓存,并为正确的用户渲染每个缓存。