organization_id !== $organization->id) { throw new AuthorizationException('Invitation does not belong to organization'); } } /** * List all invitations of an organization * * @return InvitationCollection * * @throws AuthorizationException * * @operationId getInvitations */ public function index(Organization $organization, InvitationIndexRequest $request): InvitationCollection { $this->checkPermission($organization, 'invitations:view'); $invitations = $organization->teamInvitations() ->paginate(config('app.pagination_per_page_default')); return InvitationCollection::make($invitations); } /** * Invite a user to the organization * * @throws AuthorizationException * @throws UserIsAlreadyMemberOfOrganizationApiException * * @operationId invite */ public function store(Organization $organization, InvitationStoreRequest $request, InvitationService $invitationService): JsonResponse { $this->checkPermission($organization, 'invitations:create'); $email = $request->getEmail(); $role = $request->getRole(); $invitationService->inviteUser($organization, $email, $role); return response()->json(null, 204); } /** * Resend email for a pending invitation * * @throws AuthorizationException * * @operationId resendInvitationEmail */ public function resend(Organization $organization, OrganizationInvitation $invitation, OrganizationInvitationService $organizationInvitationService): JsonResponse { $this->checkPermission($organization, 'invitations:resend', $invitation); $organizationInvitationService->resend($invitation); return response()->json(null, 204); } /** * Remove a pending invitation * * @throws AuthorizationException * * @operationId removeInvitation */ public function destroy(Organization $organization, OrganizationInvitation $invitation): JsonResponse { $this->checkPermission($organization, 'invitations:remove', $invitation); $invitation->delete(); return response()->json(null, 204); } }