次のように、submission_controller でフォームの送信をブロードキャストするアプリがあります。
Formerer.Endpoint.broadcast("forms:#{form.id}", "new_submission", payload)
ただし、私が今やろうとしているのは、 current_user だけがそのフォームにブロードキャストされた送信にアクセスできるようにすることです。(たとえば、form 2 が別のユーザーに属している場合、current_user は "forms:2" の送信を見る方法がありません)。
接続アクションでチャネルに割り当てたユーザー ID に対してのみフォームをフィルタリングすることにより、チャネルjoin
アクションでこれを行うことができます。
user = Repo.get(Formerer.User, socket.assigns.user_id)
しかし、broadcast
私は利用できませsocket
ん。
私の質問:
チャネル トピックによってソケットを何とか見つける方法はありますか? 何かのようなもの:
%Phoenix.Socket{assigns: %{user_id: user_id}, topic: "forms:1"} = ALL_OPEN_SOCKETS?!
その後、 if を確認user_id == submission.user_id
し、 true の場合はブロードキャストすることができました
- それが不可能な場合、これを実行し、current_user だけがフォーム送信にアクセスできるようにするためのベスト プラクティスは何でしょうか?