Multi-Tenancy
ITenantStore provides multi-tenant support for applications that serve multiple organizations.
Interface
import { ITenantStore, Tenant } from '@nik2208/node-auth';
export class MyTenantStore implements ITenantStore {
async createTenant(data: Omit<Tenant, 'id'>): Promise<Tenant> { /* ... */ }
async getTenantById(id: string): Promise<Tenant | null> { /* ... */ }
async getAllTenants(): Promise<Tenant[]> { /* ... */ }
async updateTenant(id: string, data: Partial<Omit<Tenant, 'id'>>): Promise<void> { /* ... */ }
async deleteTenant(id: string): Promise<void> { /* ... */ }
async associateUserWithTenant(userId: string, tenantId: string): Promise<void> { /* ... */ }
async disassociateUserFromTenant(userId: string, tenantId: string): Promise<void> { /* ... */ }
async getTenantsForUser(userId: string): Promise<Tenant[]> { /* ... */ }
async getUsersForTenant(tenantId: string): Promise<string[]> { /* ... */ }
}
Tenant Model
interface Tenant {
id: string;
name: string;
isActive?: boolean;
config?: Record<string, unknown>;
createdAt?: Date;
}
Usage
// Onboarding
const tenant = await tenants.createTenant({ name: 'Acme Corp', isActive: true });
await tenants.associateUserWithTenant(userId, tenant.id);
// Embed tenants in JWT
buildTokenPayload: async (user) => ({
tenants: (await tenants.getTenantsForUser(user.id)).map(t => t.id),
}),