我有一个 Ruby on Rails 应用程序,我正在为其实现 ActionCable。(为了全面披露,我是 RoR 的高级初学者,并且是 ActionCable 的完整菜鸟。我正在使用这个应用程序来了解它。)我试图弄清楚我是否可以执行以下操作:
想象一下您的标准聊天室(就像在所有 ActionCable 教程中一样),其变化在于:
- 用户可以在发送消息后对其进行编辑,并且
- 房间里的一些人拥有特殊权限(您可以将他们视为管理员用户)。这些管理员用户可以在其他人发送的消息发送后对其进行编辑。
呈现页面时,我对每条消息都有一个部分,如下所示:
# View:
<%= render :partial=>"message_line", :collection=>@messages, :locals=>{:current_user=>@user}%>
# _message_line.html.erb partial
<div><%= message_line %></div>
<div>
<% if current_user.admin or current_user.id==message_line.user.id %>
<%= Link to edit post... %>
<% end %>
</div>
我已成功设置 ActionCable,这样当用户输入消息时,该消息将被广播并显示在该房间内所有用户的屏幕上。但是我不知道在收到消息时如何判断接收消息的用户是否是管理员用户,因此应该显示“编辑帖子的链接”链接。调用控制器操作将消息推送给其他人的用户不是接收消息的用户,因此控制器不知道接收用户是否是管理员(特别是考虑到有多个收件人)。
作为一个具体的例子,考虑以下设置:
聊天室中有三个用户,UserA、UserB、UserC。UserA 是管理员,UserB 和 UserC 不是。
这是应该发生的事情:
- UserA 输入一条新消息。它向所有 3 个用户广播,并且所有 3 个用户都看到它显示在他们的屏幕上。UserA 看到编辑消息的链接,UserB 和 UserC 没有。
- UserB 输入一条新消息。它向所有 3 个用户广播,并且所有 3 个用户都看到它显示在他们的屏幕上。用户B和用户A 看到编辑消息的链接,用户C 没有。
提前感谢您的帮助!