first commit

This commit is contained in:
Saufi
2026-06-24 20:32:14 +08:00
commit 10fb30ad69
201 changed files with 21356 additions and 0 deletions

View File

@@ -0,0 +1,80 @@
<?php
namespace App\Policies;
use App\Models\Submission;
use App\Models\User;
class SubmissionPolicy
{
/** Perunding hanya boleh lihat serahan miliknya; kakitangan JPP lihat semua. */
public function view(User $user, Submission $submission): bool
{
if ($user->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;
}
}