123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <?php
- declare(strict_types=1);
- namespace App\Providers;
- use App\Http\Middleware\GetTenancyByUsername;
- use Illuminate\Support\Facades\Event;
- use Illuminate\Support\Facades\Route;
- use Illuminate\Support\ServiceProvider;
- use Stancl\JobPipeline\JobPipeline;
- use Stancl\Tenancy\Events;
- use Stancl\Tenancy\Jobs;
- use Stancl\Tenancy\Listeners;
- use Stancl\Tenancy\Middleware;
- class TenancyServiceProvider extends ServiceProvider
- {
-
- public static string $controllerNamespace = '';
- public function events()
- {
- return [
-
- Events\CreatingTenant::class => [],
- Events\TenantCreated::class => [
- JobPipeline::make([
- Jobs\CreateDatabase::class,
- Jobs\MigrateDatabase::class,
- Jobs\SeedDatabase::class,
-
-
- ])->send(function (Events\TenantCreated $event) {
- return $event->tenant;
- })->shouldBeQueued(),
- ],
- Events\SavingTenant::class => [],
- Events\TenantSaved::class => [],
- Events\UpdatingTenant::class => [],
- Events\TenantUpdated::class => [],
- Events\DeletingTenant::class => [],
- Events\TenantDeleted::class => [
- JobPipeline::make([
- Jobs\DeleteDatabase::class,
- ])->send(function (Events\TenantDeleted $event) {
- return $event->tenant;
- })->shouldBeQueued(false),
- ],
-
- Events\CreatingDomain::class => [],
- Events\DomainCreated::class => [],
- Events\SavingDomain::class => [],
- Events\DomainSaved::class => [],
- Events\UpdatingDomain::class => [],
- Events\DomainUpdated::class => [],
- Events\DeletingDomain::class => [],
- Events\DomainDeleted::class => [],
-
- Events\DatabaseCreated::class => [],
- Events\DatabaseMigrated::class => [],
- Events\SeedingDatabase::class => [
- ],
- Events\DatabaseSeeded::class => [],
- Events\DatabaseRolledBack::class => [],
- Events\DatabaseDeleted::class => [],
-
- Events\InitializingTenancy::class => [],
- Events\TenancyInitialized::class => [
- Listeners\BootstrapTenancy::class,
- ],
- Events\EndingTenancy::class => [],
- Events\TenancyEnded::class => [
- Listeners\RevertToCentralContext::class,
- ],
- Events\BootstrappingTenancy::class => [],
- Events\TenancyBootstrapped::class => [],
- Events\RevertingToCentralContext::class => [],
- Events\RevertedToCentralContext::class => [],
-
- Events\SyncedResourceSaved::class => [
- Listeners\UpdateSyncedResource::class,
- ],
-
- Events\SyncedResourceChangedInForeignDatabase::class => [],
- ];
- }
- public function register()
- {
-
- }
- public function boot()
- {
- $this->bootEvents();
- $this->mapRoutes();
- $this->makeTenancyMiddlewareHighestPriority();
- }
- protected function bootEvents()
- {
- foreach ($this->events() as $event => $listeners) {
- foreach ($listeners as $listener) {
- if ($listener instanceof JobPipeline) {
- $listener = $listener->toListener();
- }
- Event::listen($event, $listener);
- }
- }
- }
- protected function mapRoutes()
- {
- $this->app->booted(function () {
- if (file_exists(base_path('routes/tenant.php'))) {
- Route::namespace(static::$controllerNamespace)
- ->group(base_path('routes/tenant.php'));
- }
- });
- }
- protected function makeTenancyMiddlewareHighestPriority()
- {
- $tenancyMiddleware = [
- GetTenancyByUsername::class,
-
- Middleware\PreventAccessFromCentralDomains::class,
- Middleware\InitializeTenancyByDomain::class,
- Middleware\InitializeTenancyBySubdomain::class,
- Middleware\InitializeTenancyByDomainOrSubdomain::class,
- Middleware\InitializeTenancyByPath::class,
- Middleware\InitializeTenancyByRequestData::class,
- ];
- foreach (array_reverse($tenancyMiddleware) as $middleware) {
- $this->app[\Illuminate\Contracts\Http\Kernel::class]->prependToMiddlewarePriority($middleware);
- }
- }
- }
|