2017-07-03 41 views
1

我在ActionCable的聊天中呈現的消息的部分消息中有一個刪除鏈接。我用下面的代碼檢查,如果該current_user是admin與否以及是否用戶可以看到的鏈接或不:Action Cable:根據當前用戶播放不同的模板內容

<% if current_user.admin? %> 
    <%= link_to '[x]', msg, method: :delete, remote: true, class: "del-link" %> 
<% end %> 

但恰好是一個問題與此有關。 如果用戶(非admin)提交了消息,則會爲聊天中的每個用戶呈現爲「非管理員」,並且管理員只能在刷新後才能看到鏈接。 反之亦然,如果管理員提交消息,每個人都可以看到鏈接。

有沒有辦法解決這個問題?

回答

1

由於您正在渲染單個模板並將其廣播給所有人,因此會出現此行爲。基本問題是,當模板廣播時,current_user是發佈消息的用戶,而不是用戶通過Action Cable接收更新。

你可以做這樣的事情完全解決問題在客戶端:如果當前

body:not(.with-admin) .admin-only { 
    display: none; 
} 

而且在<body>設置with-admin類:

<%= link_to '[x]', msg, method: :delete, remote: true, class: "del-link admin-only" %> 

然後添加此CSS規則用戶是管理員:

<body class="<%= "with-admin" if current_user.admin? %>"> 
    <!-- ... --> 
</body> 

這樣admin-only元素的可見性由當前頁面是否最初作爲管理員加載進行控制,Action Cable廣播的模板可以爲每個人都擁有相同的內容。

重要:確保驗證的current_user管理員岬在destroy動作被實際刪除的消息之前!

相關問題