diff --git a/src/Bootstrappers/BroadcastTenancyBootstrapper.php b/src/Bootstrappers/BroadcastTenancyBootstrapper.php index 92a6e55b..b21964da 100644 --- a/src/Bootstrappers/BroadcastTenancyBootstrapper.php +++ b/src/Bootstrappers/BroadcastTenancyBootstrapper.php @@ -58,15 +58,20 @@ class BroadcastTenancyBootstrapper implements TenancyBootstrapper $this->setConfig($tenant); + // Make BroadcastManager resolve to a custom BroadcastManager which makes the broadcasters use the tenant credentials $this->app->extend(BroadcastManager::class, function (BroadcastManager $broadcastManager) { $tenancyBroadcastManager = new TenancyBroadcastManager($this->app); + // Because the new custom TenancyBroadcastManager won't have the original broadcasters + // It also won't have the channels registered in routes/channels.php, and without these, broadcasting won't work + // So we pass the default broadcaster to the new TenancyBroadcastManager return $tenancyBroadcastManager->setDriver($broadcastManager->getDefaultDriver(), $broadcastManager->driver()); }); } public function revert(): void { + // Change the BroadcastManager and Broadcaster singletons back to what they were before initializing tenancy $this->app->singleton(BroadcastManager::class, fn (Application $app) => $this->originalBroadcastManager); $this->app->singleton(Broadcaster::class, fn (Application $app) => $this->originalBroadcaster);