How archtechx/tenancy works
stancl/tenancy is a Laravel package that identifies a tenant for an incoming request, initializes tenant context, and scopes framework services and data to that tenant. Tenant lifecycle operations also manage tenant databases, migrations, domains, and storage; optional capabilities include PostgreSQL row-level security, resource syncing, impersonation, and tenant asset serving. The graph follows documented capabilities and the supplied excerpts; several subsystem connections are based on the README and tree rather than sampled implementation.
Main entry points: Bootstrappers Context bootstrappers · DatabaseManager.php Tenant DB manager · Tenancy.php Tenancy coordinator · IdentificationMiddleware.php Identification middleware
Components 22
Tenant identification
- Identification middleware
src/Middleware/IdentificationMiddleware.php - Tenant resolvers
src/Resolvers - Tenant and domains
src/Database/Models/Tenant.php
Tenancy context
- Tenancy coordinator
src/Tenancy.php - Laravel integration
src/TenancyServiceProvider.php - Context bootstrappers
src/Bootstrappers - Scoped framework services
src/Bootstrappers - Tenant sessions
src/Bootstrappers/DatabaseSessionBootstrapper.php
Tenant data
- Database tenancy
src/Bootstrappers/DatabaseTenancyBootstrapper.php - Tenant DB manager
src/Database/DatabaseManager.php - Database drivers
src/Database/TenantDatabaseManagers - Central database
- Tenant databases
Lifecycle operations
- Tenant commands
src/Commands - Lifecycle jobs
src/Jobs - Storage actions
src/Actions - Tenant storage
src/Bootstrappers/FilesystemTenancyBootstrapper.php
Tenant capabilities
- Postgres RLS
src/RLS - Resource syncing
src/ResourceSyncing - Optional features
src/Features - Tenant asset delivery
src/Controllers/TenantAssetController.php
Other components
- Application request
Connections 26
- Application request → Identification middleware: enters
- Identification middleware → Tenant resolvers: resolves tenant
- Tenant resolvers → Tenant and domains: finds tenant
- Tenant and domains → Central database: reads tenant records
- Identification middleware → Tenancy coordinator: initializes context
- Laravel integration → Tenancy coordinator: registers
- Tenancy coordinator → Context bootstrappers: runs bootstrap
- Context bootstrappers → Database tenancy: includes
- Database tenancy → Tenant DB manager: switches connection
- Tenant DB manager → Tenant and domains: reads database config
- Tenant DB manager → Database drivers: selects driver
- Database drivers → Tenant databases: creates and manages
- Tenant DB manager → Tenant databases: connects tenant
- Context bootstrappers → Scoped framework services: reconfigures services
- Context bootstrappers → Tenant sessions: reconfigures sessions
- Tenant sessions → Tenant databases: uses connection
- Tenant commands → Lifecycle jobs: dispatches operations
- Lifecycle jobs → Database drivers: manages databases
- Lifecycle jobs → Storage actions: runs storage actions
- Storage actions → Tenant storage: creates or removes links
- Tenant storage → Tenant databases
- Postgres RLS → Tenant databases: generates policies
- Resource syncing → Tenant databases: syncs resources
- Optional features → Tenancy coordinator: extends behavior
- Application request → Tenant asset delivery: requests tenant asset
- Tenant asset delivery → Tenant storage: reads tenant files