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, Shift $shift, Event $event, FestivalSection $section): bool { if ($shift->festival_section_id !== $section->id || $section->event_id !== $event->id) { return false; } return $this->canManageEvent($user, $event); } public function delete(User $user, Shift $shift, Event $event, FestivalSection $section): bool { if ($shift->festival_section_id !== $section->id || $section->event_id !== $event->id) { return false; } return $this->canManageEvent($user, $event); } public function assign(User $user, Shift $shift, Event $event, FestivalSection $section): bool { if ($shift->festival_section_id !== $section->id || $section->event_id !== $event->id) { return false; } return $this->canManageEvent($user, $event); } public function claim(User $user, Shift $shift, Event $event, FestivalSection $section): bool { if ($shift->festival_section_id !== $section->id || $section->event_id !== $event->id) { return false; } return $user->hasRole('super_admin') || $event->organisation->users()->where('user_id', $user->id)->exists(); } 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(); } }