1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2026-02-04 07:14:02 +00:00

fix: Enhance DomainTenantResolver to handle SingleDomainTenant correctly

This commit is contained in:
Hayatunnabi Nabil 2025-11-08 21:24:45 +06:00
parent 947894fa1d
commit e351316014
2 changed files with 26 additions and 2 deletions

View file

@ -69,9 +69,20 @@ class DomainTenantResolver extends Contracts\CachedTenantResolver
protected static function setCurrentDomain(Tenant $tenant, string $domain): void protected static function setCurrentDomain(Tenant $tenant, string $domain): void
{ {
/** @var Tenant&Model $tenant */ /** @var Tenant&Model $tenant */
if (! $tenant instanceof SingleDomainTenant) { if ($tenant instanceof SingleDomainTenant) {
static::$currentDomain = $tenant->domains->where('domain', $domain)->first(); $domainModelClass = config('tenancy.models.domain');
/** @var Domain&Model $domainModel */
$domainModel = new $domainModelClass;
$domainModel->setAttribute('domain', $domain);
$domainModel->setAttribute(Tenancy::tenantKeyColumn(), $tenant->getTenantKey());
$domainModel->setRelation('tenant', $tenant);
static::$currentDomain = $domainModel;
return;
} }
static::$currentDomain = $tenant->domains->where('domain', $domain)->first();
} }
public function getPossibleCacheKeys(Tenant&Model $tenant): array public function getPossibleCacheKeys(Tenant&Model $tenant): array

View file

@ -4,6 +4,7 @@ declare(strict_types=1);
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Stancl\Tenancy\Contracts\Domain;
use Stancl\Tenancy\Tests\Etc\SingleDomainTenant; use Stancl\Tenancy\Tests\Etc\SingleDomainTenant;
use Stancl\Tenancy\Resolvers\DomainTenantResolver; use Stancl\Tenancy\Resolvers\DomainTenantResolver;
use Stancl\Tenancy\Middleware\InitializeTenancyByDomain; use Stancl\Tenancy\Middleware\InitializeTenancyByDomain;
@ -132,3 +133,15 @@ test('single domain tenant can be identified by domain or subdomain', function (
[PreventAccessFromUnwantedDomains::class, InitializeTenancyBySubdomain::class], // Identification middleware [PreventAccessFromUnwantedDomains::class, InitializeTenancyBySubdomain::class], // Identification middleware
], ],
]); ]);
test('domain contract can be injected for single domain tenants', function () {
SingleDomainTenant::create(['domain' => 'acme.single.test']);
Route::get('/domain-check', function (Domain $domain) {
return $domain?->domain ?? 'missing';
})->middleware([InitializeTenancyByDomain::class]);
pest()
->get('http://acme.single.test/domain-check')
->assertSee('acme.single.test');
});