owns($user, $report) || $this->isAdmin($user); } public function create(User $user): bool { return $user !== null; } public function update(User $user, ClassProgressReport $report): bool { return $this->owns($user, $report) || $this->isAdmin($user); } public function delete(User $user, ClassProgressReport $report): bool { return $this->owns($user, $report) || $this->isAdmin($user); } private function owns(User $user, ClassProgressReport $report): bool { return (int) $report->teacher_id === (int) $user->id; } private function isAdmin(User $user): bool { $roles = $user->roles() ->pluck('roles.name') ->map(fn ($name) => strtolower((string) $name)) ->toArray(); foreach (['administrator', 'admin', 'principal', 'vice_principal', 'vice-principal'] as $role) { if (in_array($role, $roles, true)) { return true; } } return false; } }