我有一个应用程序,我在 submit_controller 中广播了一些表单提交,如下所示:
Formerer.Endpoint.broadcast("forms:#{form.id}", "new_submission", payload)
但是,我现在尝试做的是确保只有 current_user 才能访问为其表单广播的提交。(例如,如果表单 2 属于另一个用户,current_user 将无法查看“forms:2”的提交)。
我join
通过仅过滤我在连接操作中分配给通道的用户 ID 的表单来设法在通道操作中执行此操作:
user = Repo.get(Formerer.User, socket.assigns.user_id)
但是对于broadcast
我没有socket
可用的。
我的问题:
有没有办法通过频道主题以某种方式找到套接字?就像是:
%Phoenix.Socket{assigns: %{user_id: user_id}, topic: "forms:1"} = ALL_OPEN_SOCKETS?!
之后我可以看看是否user_id == submission.user_id
,如果为真则广播
- 如果这是不可能的,那么最好的做法是什么,并确保只有 current_user 可以访问他们的表单提交?