2

次のように、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ん。

私の質問:

  1. チャネル トピックによってソケットを何とか見つける方法はありますか? 何かのようなもの:

    %Phoenix.Socket{assigns: %{user_id: user_id}, topic: "forms:1"} = ALL_OPEN_SOCKETS?!
    

その後、 if を確認user_id == submission.user_idし、 true の場合はブロードキャストすることができました

  1. それが不可能な場合、これを実行し、current_user だけがフォーム送信にアクセスできるようにするためのベスト プラクティスは何でしょうか?
4

1 に答える 1