Claude Code के साथ Implementing Multi-Tenant Architecture
Claude Code का उपयोग करके implementing multi-tenant architecture सीखें। Practical code examples शामिल हैं।
マルチテナント設計को Claude Code सेimplement करना
SaaSapplicationではマルチテナント設計が不可欠 है।テナントबीचのdata分離、テナント固有のsettingsmanagement、アクセス制御をどう実現するかがimportantな設計判断となり है।Claude Code का उपयोग करके、appropriateなマルチテナントpatternを一貫性のあるcodeでimplementationでき है।
テナント分離patternの選択
主なアプローチはतीनあり है।
- 行レベル分離: 全テナントがsametableを共有し、
tenantIdcolumnでフィルタリング - スkeyマ分離: テナントごとに別のDBスkeyマを使用
- DB分離: テナントごとに独立したdatabase
Claude Codeに設計判断を相談する बातもでき है।
> SaaSアプリのマルチテナント設計के बारे में相談したい。
> 想定テナント数は1000程度、各テナントのdata量はमें程度。
> 行レベル分離でimplement करो、テナントIDによるフィルタリングを
> middlewareでautomationして。
テナント解決middleware
// src/middleware/tenant.ts
import { NextRequest, NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
export async function resolveTenant(request: NextRequest) {
// サブdomain सेテナントを解決
const hostname = request.headers.get('host') || '';
const subdomain = hostname.split('.')[0];
// カスタムdomain के case में
const tenant = await prisma.tenant.findFirst({
where: {
OR: [
{ subdomain },
{ customDomain: hostname },
],
isActive: true,
},
});
if (!tenant) {
return NextResponse.json({ error: 'テナントが見つかりません' }, { status: 404 });
}
// requestheaderにテナントIDを注入
const headers = new Headers(request.headers);
headers.set('x-tenant-id', tenant.id);
return NextResponse.next({ request: { headers } });
}
テナントスコープ付きPrismaclient
// src/lib/tenant-prisma.ts
import { PrismaClient } from '@prisma/client';
export function createTenantPrisma(tenantId: string) {
const prisma = new PrismaClient().$extends({
query: {
$allModels: {
async findMany({ args, query }) {
args.where = { ...args.where, tenantId };
return query(args);
},
async findFirst({ args, query }) {
args.where = { ...args.where, tenantId };
return query(args);
},
async create({ args, query }) {
args.data = { ...args.data, tenantId };
return query(args);
},
async update({ args, query }) {
args.where = { ...args.where, tenantId };
return query(args);
},
async delete({ args, query }) {
args.where = { ...args.where, tenantId };
return query(args);
},
},
},
});
return prisma;
}
テナントsettingsのmanagement
// src/services/tenant-settings.ts
interface TenantSettings {
branding: {
primaryColor: string;
logo?: string;
companyName: string;
};
features: {
maxUsers: number;
storageLimit: number;
apiAccess: boolean;
};
notifications: {
emailEnabled: boolean;
slackWebhook?: string;
};
}
export class TenantSettingsService {
async getSettings(tenantId: string): Promise<TenantSettings> {
const tenant = await prisma.tenant.findUnique({
where: { id: tenantId },
select: { settings: true, plan: true },
});
// プランに基づくデフォルトsettingsとカスタムsettingsをマージ
const planDefaults = getPlanDefaults(tenant!.plan);
return { ...planDefaults, ...tenant!.settings } as TenantSettings;
}
async updateSettings(tenantId: string, updates: Partial<TenantSettings>) {
return prisma.tenant.update({
where: { id: tenantId },
data: { settings: updates },
});
}
}
data分離testのimportant性
マルチテナントimplementationでは、テナントबीचのdata漏洩を防ぐtestが非常にimportant है।Claude Codeに「テナントAのdataがテナントB सेアクセスできない बात confirmするtest」を依頼して、十分なカバレッジを確保 करें।
関連リソース
ロールベースのアクセス制御はRBACimplementationガイド、database設計はdatabasemigrationをreference के लिए देखें。
PostgreSQLの行レベルsecurity(RLS)के बारे मेंはPostgreSQLofficial documentation(postgresql.org/docs)देखें。
Related Posts
Claude Code से अपने Side Projects को Supercharge कैसे करें [Examples के साथ]
Claude Code से personal development projects को dramatically speed up करना सीखें। Real-world examples और idea से deployment तक practical workflow शामिल है।
Claude Code से Refactoring कैसे Automate करें
Claude Code से efficiently code refactoring automate करना सीखें। Real-world projects के लिए practical prompts और concrete refactoring patterns शामिल हैं।
Claude Code के साथ Complete CORS Configuration Guide
Claude Code का उपयोग करके complete CORS configuration guide सीखें। Practical tips और code examples शामिल हैं।