isAccessibleBy($user); } // Admin TIDAK boleh view metadata content — hanya metadata minimum via viewMetadata public function viewMetadata(User $user, TranscriptionProject $project): bool { return $user->isAdmin() || $project->isAccessibleBy($user); } public function create(User $user): bool { // Admin juga kakitangan — boleh cipta projek sendiri return $user->isActive(); } public function update(User $user, TranscriptionProject $project): bool { return $project->isAccessibleBy($user); } public function delete(User $user, TranscriptionProject $project): bool { return $project->isOwnedBy($user); } public function viewAudio(User $user, TranscriptionProject $project): bool { return $project->isAccessibleBy($user); } public function viewTranscript(User $user, TranscriptionProject $project): bool { return $project->isAccessibleBy($user); } public function editTranscript(User $user, TranscriptionProject $project): bool { if ($project->isOwnedBy($user)) { return true; } // Viewer collaborator tidak boleh edit — editor sahaja return $project->collaborators() ->where('user_id', $user->id) ->wherePivot('role', 'editor') ->exists(); } public function manageCollaborators(User $user, TranscriptionProject $project): bool { return $project->isOwnedBy($user); } public function retryTranscription(User $user, TranscriptionProject $project): bool { return $project->isOwnedBy($user) && $project->isFailed(); } public function transferOwner(User $user, TranscriptionProject $project): bool { return $user->isAdmin(); } public function viewVersionHistory(User $user, TranscriptionProject $project): bool { return $project->isAccessibleBy($user); } public function restoreVersion(User $user, TranscriptionProject $project): bool { if ($project->isOwnedBy($user)) { return true; } return $project->collaborators() ->where('user_id', $user->id) ->wherePivot('role', 'editor') ->exists(); } }