can('serahan.lihat_semua')) { return true; } return $this->ownsSubmission($user, $submission); } public function viewAny(User $user): bool { return $user->can('serahan.lihat_semua') || $user->can('serahan.urus_sendiri'); } /** Hanya perunding boleh cipta serahan untuk pusat data yang ditugaskan. */ public function create(User $user): bool { return $user->can('serahan.urus_sendiri'); } /** Perunding boleh kemaskini selagi miliknya, belum dikunci & belum selesai. */ public function update(User $user, Submission $submission): bool { if (! $user->can('serahan.urus_sendiri')) { return false; } return $this->ownsSubmission($user, $submission) && $submission->isEditableByConsultant(); } /** Pegawai JPP menyemak serahan. */ public function review(User $user, Submission $submission): bool { return $user->can('serahan.semak'); } public function lock(User $user, Submission $submission): bool { return $user->can('serahan.kunci'); } public function markHardcopy(User $user, Submission $submission): bool { return $user->can('serahan.hardcopy'); } /** Perunding boleh jawab permohonan pembetulan untuk serahan miliknya. */ public function respondCorrection(User $user, Submission $submission): bool { return $user->can('serahan.urus_sendiri') && $this->ownsSubmission($user, $submission) && $submission->status === 'pembetulan_perunding'; } public function comment(User $user, Submission $submission): bool { if (! $user->can('komen.cipta')) { return false; } return $user->can('serahan.lihat_semua') || $this->ownsSubmission($user, $submission); } protected function ownsSubmission(User $user, Submission $submission): bool { $consultantId = $user->consultant?->id; return $consultantId !== null && (int) $submission->consultant_id === (int) $consultantId; } }