authorizePanel(); if (!$form->file_path || !Storage::disk('public')->exists($form->file_path)) { abort(404, 'فایل قالب یافت نشد.'); } $ext = pathinfo($form->file_path, PATHINFO_EXTENSION); return Storage::disk('public')->download( $form->file_path, 'template-' . $form->id . '-' . $shipment->awb_no . '.' . $ext ); } /** * دانلود فایل امضاشده‌ای که مشتری آپلود کرده است. * GET /admin/shipments/{shipment}/commitment-forms/{record}/signed */ public function signed(Shipment $shipment, ShipmentCommitmentForm $record) { $this->authorizePanel(); if ($record->shipment_id !== $shipment->id) { abort(404); } if (!$record->uploaded_file_path || !Storage::disk('secure')->exists($record->uploaded_file_path)) { abort(404, 'فایل امضاشده یافت نشد.'); } return Storage::disk('secure')->download( $record->uploaded_file_path, 'commitment-' . $record->commitment_form_id . '-' . $shipment->awb_no . '.' . $record->uploaded_file_type ); } /** * فقط کاربران پنل ادمین (super_admin/admin/staff) مجاز به دانلود هستند. * همان منطق User::canAccessPanel — بدون نیاز به نمونه پنل (بیرون از کانتکست Filament) */ private function authorizePanel(): void { abort_unless(auth()->user()?->hasAnyRole(['super_admin', 'admin', 'staff']), 403); } }