Multi-Tenancy
Feature toggle
MULTI_TENANCY_ENABLED=false
When false, org-specific routes and middleware groups are not registered.
Data model
organizationstable stores tenant records.users.organization_idlinks users to one org.users.rolestoresowner,admin, ormember.organization_invitesstores hashed invite tokens with expiry and acceptance state.users.is_super_admingates platform-level pages.
Flow
- User without an org is redirected to
/onboarding/organizationafter login. - Org owner/admin sends invite from
/settings/members. OrganizationService::invite()hashes token and queues an invite email job.- Invitee opens
/invite/accept?email=...&token=.... OrganizationService::acceptInvite()validates token, links/creates user, marks invite accepted.
Role enforcement
RequireOrgAdminMiddlewareallows onlyownerandadminfor org settings/members pages.RequireSuperAdminMiddlewarerequiresis_super_admin = 1for platform pages.