2017-07-03 26 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动作被实际删除的消息之前!

相关问题