2015-02-07 60 views
1

緩存視圖時,我們如何隱藏敏感或用戶特定的鏈接,例如「編輯」或「刪除」按鈕?俄羅斯娃娃緩存和隱藏敏感鏈接

使用緩存,你不能真正使用條件語句,如:

<% 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 %> 

但我將如何去驗證編輯的權限?

回答

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 %> 

這樣的軌道將生成兩個緩存,一個用於可以編輯的用戶,另一個用於不可用的緩存,併爲正確的用戶渲染。

+0

這似乎是最佳實踐。你還可以告訴我如何使用CSS來做同樣的事情,就像原來的問題一樣? – 2015-02-07 21:05:22

+0

我不確定css類如何處理它,唯一能夠做的就是隱藏鏈接,但它仍然在html代碼中,也許如果你鏈接到你有這個想法的地方我可能會有所幫助。 – 2015-02-07 21:07:36

+0

不幸的是,該鏈接將需要付費訂閱。我猜測我可以使用JS來檢查用戶權限並動態更新HTML類。但與你的方法相比,這看起來很脆弱。 – 2015-02-07 21:11:41