isAdmin() || $user->isManager()) { return true; } if ($user->isTechnician()) { return $serviceRequest->assigned_to === $user->id; } return $serviceRequest->client_id === $user->id; } public function create(User $user): bool { return $user->isAdmin() || $user->isManager() || $user->isClient(); } public function update(User $user, ServiceRequest $serviceRequest): bool { if ($user->isAdmin() || $user->isManager()) { return true; } if ($user->isTechnician()) { return $serviceRequest->assigned_to === $user->id; } return $serviceRequest->client_id === $user->id && $serviceRequest->status?->slug === StatusSlug::NEW->value; } public function delete(User $user, ServiceRequest $serviceRequest): bool { return $user->isAdmin(); } public function addInternalComment(User $user, ServiceRequest $serviceRequest): bool { if (!$user->isStaff()) { return false; } return $this->view($user, $serviceRequest); } public function rate(User $user, ServiceRequest $serviceRequest): bool { if (!$user->isClient()) { return false; } return $serviceRequest->client_id === $user->id && in_array($serviceRequest->status?->slug, [StatusSlug::RESOLVED->value, StatusSlug::CLOSED->value], true); } }