authorize($user, $team, $teamMember); $this->ensureUserDoesNotOwnTeam($teamMember, $team); $team->removeUser($teamMember); TeamMemberRemoved::dispatch($team, $teamMember); } /** * Authorize that the user can remove the team member. */ protected function authorize(User $user, Team $team, User $teamMember): void { if (! Gate::forUser($user)->check('removeTeamMember', $team) && $user->id !== $teamMember->id) { throw new AuthorizationException; } } /** * Ensure that the currently authenticated user does not own the team. */ protected function ensureUserDoesNotOwnTeam(User $teamMember, Team $team): void { if ($teamMember->id === $team->owner->id) { throw ValidationException::withMessages([ 'team' => [__('You may not leave a team that you created.')], ])->errorBag('removeTeamMember'); } } }