refactor: Streamline query modifications for cooperation-related resources by consolidating role-based filtering into getEloquentQuery methods.

This commit is contained in:
Yoga Pangestu 2026-03-16 22:29:43 +07:00
parent 0caf03e03f
commit dd3acffb4d
7 changed files with 73 additions and 62 deletions

View File

@ -65,20 +65,7 @@ public static function form(Schema $schema): Schema
public static function table(Table $table): Table public static function table(Table $table): Table
{ {
return CooperationsTable::configure($table) return CooperationsTable::configure($table);
->modifyQueryUsing(function (Builder $query): Builder {
if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)) {
$query->whereHas('cooperationMedia', function (Builder $subQuery): void {
$subQuery->whereHas('partnerMedia', function (Builder $mediaQuery): void {
$mediaQuery->whereHas('company', function (Builder $companyQuery): void {
$companyQuery->where('user_id', auth()->id());
});
});
});
}
return $query;
});
} }
public static function infolist(Schema $schema): Schema public static function infolist(Schema $schema): Schema
@ -163,6 +150,20 @@ public static function getRelations(): array
]; ];
} }
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): void {
$query->whereHas('cooperationMedia', function (Builder $subQuery): void {
$subQuery->whereHas('partnerMedia', function (Builder $mediaQuery): void {
$mediaQuery->whereHas('company', function (Builder $companyQuery): void {
$companyQuery->where('user_id', auth()->id());
});
});
});
});
}
public static function getPages(): array public static function getPages(): array
{ {
return [ return [

View File

@ -10,6 +10,7 @@
use Filament\Tables\Columns\ImageColumn; use Filament\Tables\Columns\ImageColumn;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class CooperationPaymentRelationManager extends RelationManager class CooperationPaymentRelationManager extends RelationManager
@ -62,13 +63,14 @@ public function table(Table $table): Table
->recordActions([]) ->recordActions([])
->emptyStateIcon(Heroicon::CreditCard) ->emptyStateIcon(Heroicon::CreditCard)
->emptyStateDescription('Belum ada data pembayaran.') ->emptyStateDescription('Belum ada data pembayaran.')
->defaultSort('created_at', 'desc') ->defaultSort('created_at', 'desc');
->modifyQueryUsing(function ($query) { }
$user = auth()->user();
return $query->whereHas('cooperationMedia.partnerMedia.company', function ($q) use ($user) { public function getEloquentQuery(): Builder
$q->where('user_id', $user->id); {
}); return parent::getEloquentQuery()
->whereHas('cooperationMedia.partnerMedia.company', function (Builder $query): void {
$query->where('user_id', auth()->id());
}); });
} }
} }

View File

@ -18,6 +18,7 @@
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Joaopaulolndev\FilamentPdfViewer\Infolists\Components\PdfViewerEntry; use Joaopaulolndev\FilamentPdfViewer\Infolists\Components\PdfViewerEntry;
@ -112,18 +113,7 @@ public function table(Table $table): Table
]) ])
->emptyStateIcon(Heroicon::DocumentText) ->emptyStateIcon(Heroicon::DocumentText)
->emptyStateDescription('Tidak ada proposal yang diajukan.') ->emptyStateDescription('Tidak ada proposal yang diajukan.')
->defaultSort('created_at', 'desc') ->defaultSort('created_at', 'desc');
->modifyQueryUsing(function ($query) {
$user = auth()->user();
if (! $user->hasRole(RoleEnum::PERUSAHAAN->value)) {
return $query;
}
return $query->whereHas('partnerMedia.company', function ($q) use ($user) {
$q->where('user_id', $user->id);
});
});
} }
public function infolist(Schema $infolist): Schema public function infolist(Schema $infolist): Schema
@ -173,4 +163,14 @@ public function infolist(Schema $infolist): Schema
]) ])
->columns(1); ->columns(1);
} }
public function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): void {
$query->whereHas('partnerMedia.company', function (Builder $q): void {
$q->where('user_id', auth()->id());
});
});
}
} }

View File

@ -24,6 +24,7 @@
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class ReportRelationManager extends RelationManager class ReportRelationManager extends RelationManager
@ -215,16 +216,15 @@ public function table(Table $table): Table
->toolbarActions([]) ->toolbarActions([])
->emptyStateIcon(Heroicon::InboxArrowDown) ->emptyStateIcon(Heroicon::InboxArrowDown)
->emptyStateDescription('Tidak ada laporan yang diajukan.') ->emptyStateDescription('Tidak ada laporan yang diajukan.')
->defaultSort('created_at', 'desc') ->defaultSort('created_at', 'desc');
->modifyQueryUsing(function ($query) { }
$user = auth()->user();
if (! $user->hasRole(RoleEnum::PERUSAHAAN->value)) { public function getEloquentQuery(): Builder
return $query; {
} return parent::getEloquentQuery()
->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): void {
$query->whereHas('mediaTaskAssignment.partnerMedia.company', function ($q) use ($user) { $query->whereHas('mediaTaskAssignment.partnerMedia.company', function (Builder $q): void {
$q->where('user_id', $user->id); $q->where('user_id', auth()->id());
}); });
}); });
} }

View File

@ -272,11 +272,14 @@ public static function table(Table $table): Table
->defaultSort('created_at', 'desc') ->defaultSort('created_at', 'desc')
->deferFilters(false) ->deferFilters(false)
->paginated([25, 50, 100, 'all']) ->paginated([25, 50, 100, 'all'])
->deferLoading() ->deferLoading();
->modifyQueryUsing(function (Builder $query): void { }
$query->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $q): Builder {
return $q->where('user_id', auth()->id()); public static function getEloquentQuery(): Builder
}); {
return parent::getEloquentQuery()
->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $q): Builder {
return $q->where('user_id', auth()->id());
}); });
} }

View File

@ -210,17 +210,6 @@ public static function table(Table $table): Table
->deferFilters(false) ->deferFilters(false)
->paginated([25, 50, 100, 'all']) ->paginated([25, 50, 100, 'all'])
->deferLoading() ->deferLoading()
->modifyQueryUsing(function (Builder $query): void {
if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && ! auth()->user()->company?->partnerMedia) {
$query->whereRaw('1 = 0');
}
$query->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $q): Builder {
return $q->whereHas('partnerMedia.company', function (Builder $q): void {
$q->where('user_id', auth()->id());
});
});
})
->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && ! auth()->user()->company?->partnerMedia, function (Table $table): Table { ->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && ! auth()->user()->company?->partnerMedia, function (Table $table): Table {
return $table return $table
->emptyStateHeading('Akses Dibatasi') ->emptyStateHeading('Akses Dibatasi')
@ -242,6 +231,19 @@ public static function getPages(): array
]; ];
} }
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && ! auth()->user()->company?->partnerMedia, function (Builder $query): Builder {
return $query->whereRaw('1 = 0');
})
->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): Builder {
return $query->whereHas('partnerMedia.company', function (Builder $q): void {
$q->where('user_id', auth()->id());
});
});
}
public static function getRecordRouteBindingEloquentQuery(): Builder public static function getRecordRouteBindingEloquentQuery(): Builder
{ {
return parent::getRecordRouteBindingEloquentQuery() return parent::getRecordRouteBindingEloquentQuery()

View File

@ -373,11 +373,14 @@ public static function table(Table $table): Table
->defaultSort('created_at', 'desc') ->defaultSort('created_at', 'desc')
->deferFilters(false) ->deferFilters(false)
->paginated([25, 50, 100, 'all']) ->paginated([25, 50, 100, 'all'])
->deferLoading() ->deferLoading();
->modifyQueryUsing(function (Builder $query): void { }
$query->role('Perusahaan')
->whereHas('company'); public static function getEloquentQuery(): Builder
}); {
return parent::getEloquentQuery()
->role('Perusahaan')
->whereHas('company');
} }
public static function getPages(): array public static function getPages(): array