我在部分中有一条删除链接,用于通过ActionCable在聊天中呈现的消息。如果current_user
是否为管理员,我是否使用以下代码进行检查,以及用户是否可以看到该链接:
<% if current_user.admin? %>
<%= link_to '[x]', msg, method: :delete, remote: true, class: "del-link" %>
<% end %>
但这恰好是一个问题。
当一个不是admin
的用户提交邮件时,它会被呈现为&#39;而不是管理员&#39;对于聊天中的每个用户,管理员只能在刷新后才能看到该链接。
反之亦然,如果管理员提交消息,则每个人都可以看到该链接。
有没有办法解决这个问题?
答案 0 :(得分:1)
由于您要呈现单个模板并将其广播给每个人,因此可以预期此行为。基本问题是,在将模板呈现为广播时,current_user
是发布消息的用户,不通过操作电缆接收更新的用户。
您可以通过以下方式完全在客户端解决问题:
<%= link_to '[x]', msg, method: :delete, remote: true, class: "del-link admin-only" %>
然后添加此CSS规则:
body:not(.with-admin) .admin-only {
display: none;
}
如果当前用户是管理员,请在with-admin
上设置<body>
课程:
<body class="<%= "with-admin" if current_user.admin? %>">
<!-- ... -->
</body>
这样,admin-only
元素的可见性由当前页面最初是否作为管理员加载来控制,而Action Cable广播的模板可以为每个人提供相同的内容。
重要提示:确保在实际删除邮件之前验证current_user
操作中destroy
的管理员!