hasRole('super_admin') || $event->organisation->users()->where('user_id', $user->id)->exists(); } public function view(User $user, Person $person, Event $event): bool { if ($person->event_id !== $event->id) { return false; } return $user->hasRole('super_admin') || $event->organisation->users()->where('user_id', $user->id)->exists(); } public function create(User $user, Event $event): bool { return $this->canManageEvent($user, $event); } public function update(User $user, Person $person, Event $event): bool { if ($person->event_id !== $event->id) { return false; } return $this->canManageEvent($user, $event); } public function delete(User $user, Person $person, Event $event): bool { if ($person->event_id !== $event->id) { return false; } return $this->canManageEvent($user, $event); } public function approve(User $user, Person $person, Event $event): bool { if ($person->event_id !== $event->id) { return false; } return $this->canManageEvent($user, $event); } private function canManageEvent(User $user, Event $event): bool { if ($user->hasRole('super_admin')) { return true; } $isOrgAdmin = $event->organisation->users() ->where('user_id', $user->id) ->wherePivot('role', 'org_admin') ->exists(); if ($isOrgAdmin) { return true; } return $event->users() ->where('user_id', $user->id) ->wherePivot('role', 'event_manager') ->exists(); } }