TenantAtlas/app/Filament/Resources/Workspaces/WorkspaceResource.php
2026-02-01 12:19:57 +01:00

80 lines
2.4 KiB
PHP

<?php
namespace App\Filament\Resources\Workspaces;
use App\Filament\Resources\Workspaces\Pages\CreateWorkspace;
use App\Filament\Resources\Workspaces\Pages\EditWorkspace;
use App\Filament\Resources\Workspaces\Pages\ListWorkspaces;
use App\Filament\Resources\Workspaces\Pages\ViewWorkspace;
use App\Filament\Resources\Workspaces\RelationManagers\MembershipsRelationManager;
use App\Filament\Resources\Workspaces\Schemas\WorkspaceForm;
use App\Filament\Resources\Workspaces\Schemas\WorkspaceInfolist;
use App\Filament\Resources\Workspaces\Tables\WorkspacesTable;
use App\Models\Workspace;
use App\Models\User;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
class WorkspaceResource extends Resource
{
protected static ?string $model = Workspace::class;
protected static bool $isScopedToTenant = false;
protected static ?string $recordTitleAttribute = 'name';
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedRectangleStack;
public static function form(Schema $schema): Schema
{
return WorkspaceForm::configure($schema);
}
public static function infolist(Schema $schema): Schema
{
return WorkspaceInfolist::configure($schema);
}
public static function table(Table $table): Table
{
return WorkspacesTable::configure($table);
}
public static function getEloquentQuery(): Builder
{
$user = auth()->user();
if (! $user instanceof User) {
return parent::getEloquentQuery()->whereRaw('1 = 0');
}
$workspaceIds = $user->newQuery()
->join('workspace_memberships', 'users.id', '=', 'workspace_memberships.user_id')
->where('users.id', $user->getKey())
->pluck('workspace_memberships.workspace_id');
return parent::getEloquentQuery()->whereIn('id', $workspaceIds);
}
public static function getRelations(): array
{
return [
MembershipsRelationManager::class,
];
}
public static function getPages(): array
{
return [
'index' => ListWorkspaces::route('/'),
'create' => CreateWorkspace::route('/create'),
'view' => ViewWorkspace::route('/{record}'),
'edit' => EditWorkspace::route('/{record}/edit'),
];
}
}