SuperAPI AI 工具集

multitenant-development

编程与开发

查看项目

更新于 10-16 04:18

技能介绍

多租户开发(Multitenant Development)是一项面向多租户系统的专用技能,覆盖租户识别、数据隔离、租户专属配置与 RLS(行级安全)策略等核心环节。

用途 该技能用于在开发多租户功能时提供统一的操作规范与代码模式,帮助开发者在 API、中间件、数据库查询和资源加载等环节正确处理租户上下文,避免跨租户数据泄露。

主要能力

  • 租户识别:在 API 与中间件中通过 getTenantFromRequest() 校验租户。
  • 数据隔离:所有查询必须按 tenant_id 过滤,确保不同租户的数据互不可见。
  • RLS 策略:确保行级安全策略包含租户校验,例如通过 current_setting('app.tenant_slug', true) 匹配 tenants 表中的 slug。
  • 租户专属配置:在 public/tenants/{tenant_slug}/ 下配置租户专属资源。
  • 资源路径处理:使用 getTenantAssetPath(tenant, assetPath, fallback) 生成资源 URL,包含按部署的缓存失效参数 ?v=。

关键文件

  • src/lib/tenant/tenant-service.ts:主租户服务。
  • src/lib/tenant/tenant-assets.ts:带缓存失效的资源 URL(Supabase 或本地)。
  • src/middleware.ts:租户识别。
  • src/components/TenantThemeStyles.tsx:租户样式。
  • supabase/migrations/*:RLS 迁移。
  • optimize-pintemas-assets-upload.js:将租户资源上传到 tenant-assets 存储桶。

使用方式 在 API 中实现租户隔离时,先调用 getTenantFromRequest(request) 获取租户,若不存在则返回 404;随后创建 Supabase 客户端,查询时使用 .eq('tenant_id', tenant.id) 过滤。RLS 策略示例:CREATE POLICY "tenant_isolation_products" ON products FOR ALL USING (tenant_id = (SELECT id FROM tenants WHERE slug = current_setting('app.tenant_slug', true)))。资源方面,使用 getTenantAssetPath() 生成带缓存失效的 URL,例如 getTenantAssetPath(tenant, 'logo.svg', '/images/logo/logo.svg'),主色可取自 tenant.primary_color 或默认值 '#ea5a17'。资源存放于 Supabase 的 tenant-assets 存储桶,路径为 tenants/{slug}/...,通过 node optimize-pintemas-assets-upload.js 上传。更改资源后需部署并清除 CDN 缓存(npm run cache:purge 或 Vercel → Settings → Caches),相关说明见 docs/CACHE_PURGE_ANTES_DEPLOY.md。

适用场景 适用于需要为多个租户提供隔离数据与个性化配置的 Web 应用开发,尤其是使用 Supabase 与 Next.js 的项目。

限制 资料未提供该技能的具体安装命令、收费方式、支持平台及性能指标等信息。