From 7e0b080efc9890e5ea77541190b6431d393ce9e5 Mon Sep 17 00:00:00 2001 From: Baspa Date: Wed, 21 Jan 2026 09:07:10 +0100 Subject: [PATCH 1/3] fix: set missing `site_ulid` tenant on model level --- .../Models/Concerns/BelongsToCurrentTenant.php | 17 +++++++++++++++++ packages/core/src/Models/Content.php | 2 ++ packages/core/src/Models/Domain.php | 2 ++ packages/core/src/Models/Form.php | 2 ++ packages/core/src/Models/FormAction.php | 2 ++ packages/core/src/Models/Menu.php | 2 ++ packages/core/src/Models/Setting.php | 2 ++ .../ContentResource/Pages/CreateContent.php | 5 ----- .../RelationManagers/ActionsRelationManager.php | 7 ------- .../SettingResource/Pages/CreateSetting.php | 5 ----- 10 files changed, 29 insertions(+), 17 deletions(-) create mode 100644 packages/core/src/Models/Concerns/BelongsToCurrentTenant.php diff --git a/packages/core/src/Models/Concerns/BelongsToCurrentTenant.php b/packages/core/src/Models/Concerns/BelongsToCurrentTenant.php new file mode 100644 index 00000000..21fc0649 --- /dev/null +++ b/packages/core/src/Models/Concerns/BelongsToCurrentTenant.php @@ -0,0 +1,17 @@ +site_ulid && Filament::getTenant()) { + $model->site_ulid = Filament::getTenant()->ulid; + } + }); + } +} diff --git a/packages/core/src/Models/Content.php b/packages/core/src/Models/Content.php index 6492bb99..f908e251 100644 --- a/packages/core/src/Models/Content.php +++ b/packages/core/src/Models/Content.php @@ -8,6 +8,7 @@ use Backstage\Fields\Models\Field; use Backstage\Jobs\TranslateContent; use Backstage\Media\Concerns\HasMedia; +use Backstage\Models\Concerns\BelongsToCurrentTenant; use Backstage\Models\Concerns\HasContentRelations; use Backstage\Observers\ContentDepthObserver; use Backstage\Observers\ContentRevisionObserver; @@ -70,6 +71,7 @@ #[ObservedBy(ContentRevisionObserver::class)] class Content extends Model { + use BelongsToCurrentTenant; use DecodesJsonStrings; use HasContentRelations; use HasFields; diff --git a/packages/core/src/Models/Domain.php b/packages/core/src/Models/Domain.php index 5185b325..ba041372 100644 --- a/packages/core/src/Models/Domain.php +++ b/packages/core/src/Models/Domain.php @@ -2,6 +2,7 @@ namespace Backstage\Models; +use Backstage\Models\Concerns\BelongsToCurrentTenant; use Backstage\Shared\HasPackageFactory; use Illuminate\Database\Eloquent\Concerns\HasUlids; use Illuminate\Database\Eloquent\Model; @@ -10,6 +11,7 @@ class Domain extends Model { + use BelongsToCurrentTenant; use HasPackageFactory; use HasUlids; diff --git a/packages/core/src/Models/Form.php b/packages/core/src/Models/Form.php index c9f737b5..08429f38 100644 --- a/packages/core/src/Models/Form.php +++ b/packages/core/src/Models/Form.php @@ -3,6 +3,7 @@ namespace Backstage\Models; use Backstage\Fields\Models\Field; +use Backstage\Models\Concerns\BelongsToCurrentTenant; use Backstage\Shared\HasPackageFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -11,6 +12,7 @@ class Form extends Model { + use BelongsToCurrentTenant; use HasPackageFactory; protected $primaryKey = 'slug'; diff --git a/packages/core/src/Models/FormAction.php b/packages/core/src/Models/FormAction.php index e2541267..74e488e5 100644 --- a/packages/core/src/Models/FormAction.php +++ b/packages/core/src/Models/FormAction.php @@ -3,6 +3,7 @@ namespace Backstage\Models; use Backstage\Mail\FormActionExecute; +use Backstage\Models\Concerns\BelongsToCurrentTenant; use Backstage\Shared\HasPackageFactory; use Illuminate\Database\Eloquent\Concerns\HasUlids; use Illuminate\Database\Eloquent\Model; @@ -13,6 +14,7 @@ */ class FormAction extends Model { + use BelongsToCurrentTenant; use HasPackageFactory; use HasUlids; diff --git a/packages/core/src/Models/Menu.php b/packages/core/src/Models/Menu.php index b8e9bb50..bf4bf9e0 100644 --- a/packages/core/src/Models/Menu.php +++ b/packages/core/src/Models/Menu.php @@ -2,6 +2,7 @@ namespace Backstage\Models; +use Backstage\Models\Concerns\BelongsToCurrentTenant; use Backstage\Shared\HasPackageFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -9,6 +10,7 @@ class Menu extends Model { + use BelongsToCurrentTenant; use HasPackageFactory; protected $primaryKey = 'slug'; diff --git a/packages/core/src/Models/Setting.php b/packages/core/src/Models/Setting.php index ae0c1bfb..227dcc3d 100644 --- a/packages/core/src/Models/Setting.php +++ b/packages/core/src/Models/Setting.php @@ -3,6 +3,7 @@ namespace Backstage\Models; use Backstage\Fields\Concerns\HasFields; +use Backstage\Models\Concerns\BelongsToCurrentTenant; use Backstage\Models\Concerns\HasContentRelations; use Backstage\Shared\HasPackageFactory; use Illuminate\Database\Eloquent\Concerns\HasUlids; @@ -18,6 +19,7 @@ */ class Setting extends Model { + use BelongsToCurrentTenant; use HasContentRelations; use HasFields; use HasPackageFactory; diff --git a/packages/core/src/Resources/ContentResource/Pages/CreateContent.php b/packages/core/src/Resources/ContentResource/Pages/CreateContent.php index 8362c98f..772e33d6 100644 --- a/packages/core/src/Resources/ContentResource/Pages/CreateContent.php +++ b/packages/core/src/Resources/ContentResource/Pages/CreateContent.php @@ -5,7 +5,6 @@ use Backstage\Fields\Concerns\CanMapDynamicFields; use Backstage\Fields\Concerns\PersistsContentData; use Backstage\Resources\ContentResource; -use Filament\Facades\Filament; use Filament\Resources\Pages\CreateRecord; class CreateContent extends CreateRecord @@ -50,10 +49,6 @@ protected function mutateFormDataBeforeCreate(array $data): array unset($data['tags']); unset($data['values']); - if (! isset($data['site_ulid']) && Filament::getTenant()) { - $data['site_ulid'] = Filament::getTenant()->ulid; - } - return $data; } diff --git a/packages/core/src/Resources/FormResource/RelationManagers/ActionsRelationManager.php b/packages/core/src/Resources/FormResource/RelationManagers/ActionsRelationManager.php index b3235c67..89b4cc54 100644 --- a/packages/core/src/Resources/FormResource/RelationManagers/ActionsRelationManager.php +++ b/packages/core/src/Resources/FormResource/RelationManagers/ActionsRelationManager.php @@ -9,7 +9,6 @@ use Filament\Actions\DeleteAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; -use Filament\Facades\Filament; use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Select; use Filament\Forms\Components\Textarea; @@ -174,12 +173,6 @@ public function table(Table $table): Table ->headerActions([ CreateAction::make() ->slideOver() - ->mutateDataUsing(function (array $data) { - return [ - ...$data, - 'site_ulid' => Filament::getTenant()->ulid, - ]; - }) ->after(function (Component $livewire) { $livewire->dispatch('refreshFields'); }), diff --git a/packages/core/src/Resources/SettingResource/Pages/CreateSetting.php b/packages/core/src/Resources/SettingResource/Pages/CreateSetting.php index 999e9f4f..61d4ca0b 100644 --- a/packages/core/src/Resources/SettingResource/Pages/CreateSetting.php +++ b/packages/core/src/Resources/SettingResource/Pages/CreateSetting.php @@ -8,9 +8,4 @@ class CreateSetting extends CreateRecord { protected static string $resource = SettingResource::class; - - protected function mutateFormDataBeforeCreate(array $data): array - { - return $data; - } } From 74485ed0fe4efc1df00e8b3eb3913991ff0715e4 Mon Sep 17 00:00:00 2001 From: Baspa Date: Wed, 21 Jan 2026 09:17:43 +0100 Subject: [PATCH 2/3] fix: add missing relationship definition parameters --- packages/core/src/Models/Block.php | 2 +- packages/core/src/Models/Site.php | 6 +++--- packages/core/src/Models/Template.php | 2 +- packages/core/src/Models/Type.php | 2 +- packages/core/src/Models/User.php | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/core/src/Models/Block.php b/packages/core/src/Models/Block.php index 751adcb6..04dca0e9 100644 --- a/packages/core/src/Models/Block.php +++ b/packages/core/src/Models/Block.php @@ -39,7 +39,7 @@ protected function casts(): array public function sites(): BelongsToMany { - return $this->belongsToMany(Site::class); + return $this->belongsToMany(Site::class, 'block_site', 'block_ulid', 'site_ulid'); } public function render(): HtmlString diff --git a/packages/core/src/Models/Site.php b/packages/core/src/Models/Site.php index a66e04da..9b351dac 100644 --- a/packages/core/src/Models/Site.php +++ b/packages/core/src/Models/Site.php @@ -61,17 +61,17 @@ public function settings(): HasMany public function types(): BelongsToMany { - return $this->belongsToMany(Type::class); + return $this->belongsToMany(Type::class, 'site_type', 'site_ulid', 'type_slug'); } public function users(): BelongsToMany { - return $this->belongsToMany(User::class); + return $this->belongsToMany(User::class, 'site_user', 'site_ulid', 'user_id'); } public function blocks(): BelongsToMany { - return $this->belongsToMany(Block::class); + return $this->belongsToMany(Block::class, 'block_site', 'site_ulid', 'block_ulid'); } public function forms(): HasMany diff --git a/packages/core/src/Models/Template.php b/packages/core/src/Models/Template.php index 4ff5f66b..f4ba41ec 100644 --- a/packages/core/src/Models/Template.php +++ b/packages/core/src/Models/Template.php @@ -34,6 +34,6 @@ public function fields(): MorphToMany public function sites(): BelongsToMany { - return $this->belongsToMany(Site::class); + return $this->belongsToMany(Site::class, 'site_template', 'template_slug', 'site_ulid'); } } diff --git a/packages/core/src/Models/Type.php b/packages/core/src/Models/Type.php index be4eab2e..ab32cbcd 100644 --- a/packages/core/src/Models/Type.php +++ b/packages/core/src/Models/Type.php @@ -32,7 +32,7 @@ protected function casts(): array public function sites(): BelongsToMany { - return $this->belongsToMany(Site::class); + return $this->belongsToMany(Site::class, 'site_type', 'type_slug', 'site_ulid'); } public function getTemplateAttribute(): string diff --git a/packages/core/src/Models/User.php b/packages/core/src/Models/User.php index 0d42a8ba..cd4ca629 100644 --- a/packages/core/src/Models/User.php +++ b/packages/core/src/Models/User.php @@ -83,7 +83,7 @@ class User extends Authenticatable implements FilamentUser, HasAppAuthentication public function sites(): BelongsToMany { - return $this->belongsToMany(Site::class); + return $this->belongsToMany(Site::class, 'site_user', 'user_id', 'site_ulid'); } public function settings(): BelongsToMany From 1b851a81f51c2ec2990205c787eb94ae367be68a Mon Sep 17 00:00:00 2001 From: Baspa Date: Wed, 21 Jan 2026 09:23:10 +0100 Subject: [PATCH 3/3] fix: attach relationship to prevent 404 after creating --- .../core/src/Resources/BlockResource/Pages/CreateBlock.php | 6 ++++++ .../src/Resources/TemplateResource/Pages/CreateTemplate.php | 6 ++++++ .../core/src/Resources/TypeResource/Pages/CreateType.php | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/packages/core/src/Resources/BlockResource/Pages/CreateBlock.php b/packages/core/src/Resources/BlockResource/Pages/CreateBlock.php index d7b59030..49bc2fb9 100644 --- a/packages/core/src/Resources/BlockResource/Pages/CreateBlock.php +++ b/packages/core/src/Resources/BlockResource/Pages/CreateBlock.php @@ -3,9 +3,15 @@ namespace Backstage\Resources\BlockResource\Pages; use Backstage\Resources\BlockResource; +use Filament\Facades\Filament; use Filament\Resources\Pages\CreateRecord; class CreateBlock extends CreateRecord { protected static string $resource = BlockResource::class; + + protected function afterCreate(): void + { + $this->record->sites()->attach(Filament::getTenant()); + } } diff --git a/packages/core/src/Resources/TemplateResource/Pages/CreateTemplate.php b/packages/core/src/Resources/TemplateResource/Pages/CreateTemplate.php index 00d344a1..193510e5 100644 --- a/packages/core/src/Resources/TemplateResource/Pages/CreateTemplate.php +++ b/packages/core/src/Resources/TemplateResource/Pages/CreateTemplate.php @@ -3,9 +3,15 @@ namespace Backstage\Resources\TemplateResource\Pages; use Backstage\Resources\TemplateResource; +use Filament\Facades\Filament; use Filament\Resources\Pages\CreateRecord; class CreateTemplate extends CreateRecord { protected static string $resource = TemplateResource::class; + + protected function afterCreate(): void + { + $this->record->sites()->attach(Filament::getTenant()); + } } diff --git a/packages/core/src/Resources/TypeResource/Pages/CreateType.php b/packages/core/src/Resources/TypeResource/Pages/CreateType.php index 9435931d..59611d2f 100644 --- a/packages/core/src/Resources/TypeResource/Pages/CreateType.php +++ b/packages/core/src/Resources/TypeResource/Pages/CreateType.php @@ -3,9 +3,15 @@ namespace Backstage\Resources\TypeResource\Pages; use Backstage\Resources\TypeResource; +use Filament\Facades\Filament; use Filament\Resources\Pages\CreateRecord; class CreateType extends CreateRecord { protected static string $resource = TypeResource::class; + + protected function afterCreate(): void + { + $this->record->sites()->attach(Filament::getTenant()); + } }