Faye to ActionCable: broadcasting modernization #1

Merged
bterkuile merged 16 commits from feat/review-improve-and-document-the-broadcasting-model into master 2026-05-17 21:23:37 +02:00
2 changed files with 13 additions and 2 deletions
Showing only changes of commit c48f4d9041 - Show all commits
+9 -1
View File
@@ -4,7 +4,13 @@ module ApplicationCable
class Connection < ActionCable::Connection::Base
# Authenticate via auth_token (same mechanism used in ApplicationController#authenticate_employee!)
# Clients should pass ?auth_token=TOKEN when connecting to the WebSocket.
identified_by :current_user, :current_entity_type
#
# Auth flows:
# User app: ?auth_token=<user_token>
# Supplier app: ?auth_token=<employee_token>&supplier_id=<id>
# (Employee logs in, acts on behalf of a specific Supplier)
#
identified_by :current_user, :current_entity_type, :current_supplier_id
def connect
token = request.params[:auth_token].presence
@@ -13,6 +19,8 @@ module ApplicationCable
if (employee = Employee.find_by_authentication_token(token))
self.current_user = employee
self.current_entity_type = :employee
# Employee acts on behalf of a supplier — passed as query param
self.current_supplier_id = request.params[:supplier_id]
elsif (user = User.find_by_authentication_token(token))
self.current_user = user
self.current_entity_type = :user
+4 -1
View File
@@ -31,7 +31,10 @@ class MozoChannel < ApplicationCable::Channel
when 'user'
connection.current_entity_type == :user && connection.current_user.id.to_s == id
when 'supplier'
connection.current_entity_type == :supplier && connection.current_user.id.to_s == id
# Supplier app: Employee logs in, acts on behalf of a Supplier.
# The supplier_id is passed as a query param when connecting.
(connection.current_entity_type == :supplier && connection.current_user.id.to_s == id) ||
(connection.current_entity_type == :employee && connection.current_supplier_id.to_s == id)
when 'employee'
connection.current_entity_type == :employee && connection.current_user.id.to_s == id
else