feat: implement per-role WO visibility via getEloquentQuery
Admin/owner and users with work_orders.view_all see all work orders. Users with only work_orders.view_own_assigned (mechanics) see only work orders where master_id = their own user ID. Roles without either permission see nothing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ use App\Models\Tenant\WorkOrder;
|
|||||||
use App\Tenancy\TenantManager;
|
use App\Tenancy\TenantManager;
|
||||||
use Filament\Actions;
|
use Filament\Actions;
|
||||||
use Filament\Forms;
|
use Filament\Forms;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Schemas;
|
use Filament\Schemas;
|
||||||
use Filament\Schemas\Components\Utilities\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
@@ -244,4 +245,25 @@ class WorkOrderResource extends Resource
|
|||||||
'edit' => Pages\EditWorkOrder::route('/{record}/edit'),
|
'edit' => Pages\EditWorkOrder::route('/{record}/edit'),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply per-user visibility based on the permissions matrix:
|
||||||
|
* admin/owner → all work orders
|
||||||
|
* work_orders.view_all → all work orders
|
||||||
|
* view_own_assigned only → only WOs where master_id = current user
|
||||||
|
*/
|
||||||
|
public static function getEloquentQuery(): Builder
|
||||||
|
{
|
||||||
|
$query = parent::getEloquentQuery();
|
||||||
|
$user = auth()->user();
|
||||||
|
|
||||||
|
if (! $user) return $query->whereRaw('0 = 1');
|
||||||
|
if ($user->isAdmin()) return $query;
|
||||||
|
if ($user->canDo(\App\Auth\Permissions::WORK_ORDERS_VIEW_ALL)) return $query;
|
||||||
|
if ($user->canDo(\App\Auth\Permissions::WORK_ORDERS_VIEW_OWN_ASSIGNED)) {
|
||||||
|
return $query->where('master_id', $user->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query->whereRaw('0 = 1');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user