Mengimplementasikan Multi-Tenant Architecture dengan Claude Code
Learn about implementing multi-tenant architecture using Claude Code. Includes practical code examples.
マルチテナント設計 dengan Claude Code: implementasi
SaaSaplikasi マルチテナント設計 不可欠.テナント間 データ分離、テナント固有 pengaturanmanajemen、アクセス制御 どう実現 か pentingな設計判断 dan なり.Claude Code 使えば、tepatなマルチテナントpola 一貫性 adaコード implementasi bisa dilakukan.
選択 テナント分離pola
主なアプローチ 3つあり.
- 行レベル分離: 全テナント 同じテーブル berbagiし、
tenantIdカラム filtering - スキーマ分離: テナントご dan 別 DBスキーマ penggunaan
- DB分離: テナントご dan 独立 database
Claude Code 設計判断 相談 こ dan juga bisa dilakukan.
> SaaSaplikasi マルチテナント設計 ついて相談したい。
> 想定テナント数 1000程度、各テナント データ量 中程度。
> 行レベル分離 dengan implementasiして、テナントID よるfiltering
> middleware dengan otomatisasiして。
テナントsolusimiddleware
// src/middleware/tenant.ts
import { NextRequest, NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
export async function resolveTenant(request: NextRequest) {
// サブdomainからテナント solusi
const hostname = request.headers.get('host') || '';
const subdomain = hostname.split('.')[0];
// カスタムdomain 場合
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;
}
manajemen テナントpengaturan
// 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 },
});
// プラン 基づくデフォルトpengaturan dan カスタムpengaturan マージ
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 },
});
}
}
penting性 データ分離test
マルチテナントimplementasi 、テナント間 データ漏洩 防ぐtest 非常 penting.Claude Code 「テナントA データ テナントB dari アクセス き tidakこ dan konfirmasi test」 依頼 、十分なcoverage 確保し.
Resource Terkait
ロールベース アクセス制御 RBACimplementasipanduan、database設計 databaseマイグレーション 参考 .
PostgreSQL 行レベルセキュリティ(RLS) mengenai PostgreSQL公式dokumen(postgresql.org/docs) silakan lihat.
Related Posts
Cara Mempercepat Side Project dengan Claude Code [Dengan Contoh]
Pelajari cara mempercepat project development personal secara drastis menggunakan Claude Code. Dilengkapi contoh nyata dan workflow praktis dari ide hingga deployment.
Cara Mengotomatisasi Refactoring dengan Claude Code
Pelajari cara mengotomatisasi code refactoring secara efisien menggunakan Claude Code. Dilengkapi prompt praktis dan pola refactoring konkret untuk project nyata.
Panduan Lengkap Konfigurasi CORS dengan Claude Code
Pelajari tentang panduan lengkap konfigurasi CORS menggunakan Claude Code. Dilengkapi tips praktis dan contoh kode.