mirror of
https://github.com/archtechx/tenancy.git
synced 2026-05-06 18:04:03 +00:00
Merge branch 'master' into subdomain-check
This commit is contained in:
commit
3976880dcb
12 changed files with 171 additions and 23 deletions
|
|
@ -63,7 +63,7 @@ class TenantDump extends DumpCommand
|
|||
protected function getOptions(): array
|
||||
{
|
||||
return array_merge([
|
||||
['tenant', null, InputOption::VALUE_OPTIONAL, '', null],
|
||||
new InputOption('tenant', null, InputOption::VALUE_OPTIONAL, '', null),
|
||||
], parent::getOptions());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ trait HasTenantOptions
|
|||
protected function getOptions()
|
||||
{
|
||||
return array_merge([
|
||||
['tenants', null, InputOption::VALUE_IS_ARRAY|InputOption::VALUE_OPTIONAL, 'The tenants to run this command for. Leave empty for all tenants', null],
|
||||
['with-pending', null, InputOption::VALUE_NONE, 'Include pending tenants in query'], // todo@pending should we also offer without-pending? if we add this, mention in docs
|
||||
new InputOption('tenants', null, InputOption::VALUE_IS_ARRAY|InputOption::VALUE_OPTIONAL, 'The tenants to run this command for. Leave empty for all tenants', null),
|
||||
new InputOption('with-pending', null, InputOption::VALUE_NONE, 'Include pending tenants in query'), // todo@pending should we also offer without-pending? if we add this, mention in docs
|
||||
], parent::getOptions());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,17 @@ trait BelongsToPrimaryModel
|
|||
abstract public function getRelationshipToPrimaryModel(): string;
|
||||
|
||||
public static function bootBelongsToPrimaryModel(): void
|
||||
{
|
||||
if (method_exists(static::class, 'whenBooted')) {
|
||||
// Laravel 13
|
||||
// For context see https://github.com/calebporzio/sushi/commit/62ff7f432cac736cb1da9f46d8f471cb78914b92
|
||||
static::whenBooted(fn () => static::configureBelongsToPrimaryModelScope());
|
||||
} else {
|
||||
static::configureBelongsToPrimaryModelScope();
|
||||
}
|
||||
}
|
||||
|
||||
protected static function configureBelongsToPrimaryModelScope()
|
||||
{
|
||||
$implicitRLS = config('tenancy.rls.manager') === TraitRLSManager::class && TraitRLSManager::$implicitRLS;
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,17 @@ trait BelongsToTenant
|
|||
}
|
||||
|
||||
public static function bootBelongsToTenant(): void
|
||||
{
|
||||
if (method_exists(static::class, 'whenBooted')) {
|
||||
// Laravel 13
|
||||
// For context see https://github.com/calebporzio/sushi/commit/62ff7f432cac736cb1da9f46d8f471cb78914b92
|
||||
static::whenBooted(fn () => static::configureBelongsToTenantScope());
|
||||
} else {
|
||||
static::configureBelongsToTenantScope();
|
||||
}
|
||||
}
|
||||
|
||||
protected static function configureBelongsToTenantScope(): void
|
||||
{
|
||||
// If TraitRLSManager::$implicitRLS is true or this model implements RLSModel
|
||||
// Postgres RLS is used for scoping, so we don't enable the scope used with single-database tenancy.
|
||||
|
|
|
|||
|
|
@ -129,7 +129,15 @@ class TenancyUrlGenerator extends UrlGenerator
|
|||
throw new InvalidArgumentException('Attribute [name] expects a string backed enum.');
|
||||
}
|
||||
|
||||
[$name, $parameters] = $this->prepareRouteInputs($name, Arr::wrap($parameters)); // @phpstan-ignore argument.type
|
||||
$wrappedParameters = Arr::wrap($parameters);
|
||||
|
||||
[$name, $parameters] = $this->prepareRouteInputs($name, $wrappedParameters); // @phpstan-ignore argument.type
|
||||
|
||||
if (isset($wrappedParameters[static::$bypassParameter])) {
|
||||
// If the bypass parameter was passed, we need to add it back to the parameters after prepareRouteInputs() removes it,
|
||||
// so that the underlying route() call in parent::temporarySignedRoute() can bypass the behavior modification as well.
|
||||
$parameters[static::$bypassParameter] = $wrappedParameters[static::$bypassParameter];
|
||||
}
|
||||
|
||||
return parent::temporarySignedRoute($name, $expiration, $parameters, $absolute);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -152,6 +152,26 @@ class Tenancy
|
|||
$this->initialized = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* End tenancy and initialize it again for the current tenant.
|
||||
*
|
||||
* This can be helpful when changing "dependencies" of bootstrappers such as
|
||||
* attributes of the current tenant that are only read once, during bootstrap().
|
||||
*
|
||||
* If tenancy is not initialized, this method is a no-op.
|
||||
*/
|
||||
public function reinitialize(): void
|
||||
{
|
||||
if ($this->tenant === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
$tenant = $this->tenant;
|
||||
$this->end();
|
||||
|
||||
$this->initialize($tenant);
|
||||
}
|
||||
|
||||
/** @return TenancyBootstrapper[] */
|
||||
public function getBootstrappers(): array
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue